# xml-js-builder [![npm Version](https://img.shields.io/npm/v/xml-js-builder.svg)](https://www.npmjs.com/package/xml-js-builder) [![Build Status](https://travis-ci.org/OpenMarshal/xml-js-builder.svg?branch=master)](https://travis-ci.org/OpenMarshal/xml-js-builder)

This is a `npm` library which ease the use of XML with namespaces.

This way, parsing `<tag xmlns="ns"/>` will be reachable by `.find('ns:tag')` instead of having to check the attributes to know if it is in the right namespace.

The `xmljs.XML.parse(...)` can parse XML, JSON (compact and extended) from `xml-js`.

## Install

```bash
npm install xml-js-builder
```

## Usage

```javascript
const xmljs = require('xml-js-builder');

const xml = xmljs.XML.parse(myXML);

try
{
    const text = xml.find('DAV:tag').find('DAV:subtag').findText();
    const texts = xml.find('DAV:tag').findMany('DAV:subtags').map((tag) => tag.findText());

    // [...]
}
catch(ex)
{
    console.error(ex);
}
```

```javascript
const xmljs = require('xml-js-builder');

// <d:multistatus xmlns:d="DAV:" xmlns:x="ok:"> ... </d:multistatus>
const xml = new xmljs.XMLElementBuilder('d:multistatus', {
    'xmlns:d': 'DAV:',
    'xmlns:x': 'ok:'
});
// <d:deep xmlns="ttt:"><test/></d:deep>
xml.ele('d:deep', {
    'xmlns': 'ttt:'
}).ele('test');
// <d:node2>Ok1</d:node2>
xml.ele('d:node2').add('Ok1')
// <d:node2>Ok2</d:node2>
xml.ele('d:node2').add('Ok2')
// <d:tag/>
xml.ele('d:tag')
// <x:test/>
xml.ele('x:test')
// <d:nons>yes</d:nons>
xml.ele('nons').add('yes')
// <d:node2>Ok3</d:node2>
xml.ele('d:node2').add('Ok3')

console.log(xml.toJSON());
console.log(xml.toXML());
```
