3.1.1 • Published 3 years ago

xmlbuilder2 v3.1.1

Weekly downloads
104,347
License
MIT
Repository
github
Last release
3 years ago

xmlbuilder2

An XML builder for node.js.

License NPM Version NPM Downloads jsDelivr

Node.js CI Code Coverage Dev Dependency Status

Installation:

npm install xmlbuilder2

Documentation:

See: https://oozcitak.github.io/xmlbuilder2/

Usage:

xmlbuilder2 is a wrapper around DOM nodes which adds chainable functions to make it easier to create and work with XML documents. For example the following XML document:

<?xml version="1.0"?>
<root att="val">
  <foo>
    <bar>foobar</bar>
  </foo>
  <baz/>
</root>

can be created with the following function chain:

const { create } = require('xmlbuilder2');

const root = create({ version: '1.0' })
  .ele('root', { att: 'val' })
    .ele('foo')
      .ele('bar').txt('foobar').up()
    .up()
    .ele('baz').up()
  .up();

// convert the XML tree to string
const xml = root.end({ prettyPrint: true });
console.log(xml);

The same XML document can be created by converting a JS object into XML nodes:

const { create } = require('xmlbuilder2');

const obj = {
  root: {
    '@att': 'val',
    foo: {
      bar: 'foobar'
    },
    baz: {}
  }
};

const doc = create(obj);
const xml = doc.end({ prettyPrint: true });
console.log(xml);

xmlbuilder2 can also parse and serialize XML documents from different formats:

const { create } = require('xmlbuilder2');

const xmlStr = '<root att="val"><foo><bar>foobar</bar></foo></root>';
const doc = create(xmlStr);

// append a 'baz' element to the root node of the document
doc.root().ele('baz');

const xml = doc.end({ prettyPrint: true });
console.log(xml);

which would output the same document string at the top of this page.

Or you could return a JS object by changing the format argument to 'object':

const obj = doc.end({ format: 'object' });
console.log(obj);
{
  root: {
    '@att': 'val',
    foo: {
      bar: 'foobar'
    },
    baz: {}
  }
}

You can convert between formats in one go with the convert function:

const { convert } = require('xmlbuilder2');

const xmlStr = '<root att="val"><foo><bar>foobar</bar></foo></root>';
const obj = convert(xmlStr, { format: "object" });

console.log(obj);
{
  root: {
    '@att': 'val',
    foo: {
      bar: 'foobar'
    }
  }
}

If you need to do some processing:

const { create } = require('xmlbuilder2');

const root = create().ele('squares');
root.com('f(x) = x^2');
for(let i = 1; i <= 5; i++)
{
  const item = root.ele('data');
  item.att('x', i);
  item.att('y', i * i);
}

const xml = root.end({ prettyPrint: true });
console.log(xml);

This will result in:

<?xml version="1.0"?>
<squares>
  <!-- f(x) = x^2 -->
  <data x="1" y="1"/>
  <data x="2" y="4"/>
  <data x="3" y="9"/>
  <data x="4" y="16"/>
  <data x="5" y="25"/>
</squares>

Usage in the browser:

You can build the minified production bundle (lib/xmlbuilder2.min.js) after cloning the repository and issuing npx webpack in your terminal. The bundle is also in the npm package, so you can also use a public npm CDN like jsDelivr or unpkg:

<!-- latest version from jsDelivr -->
<script src="https://cdn.jsdelivr.net/npm/xmlbuilder2/lib/xmlbuilder2.min.js"></script>
<!-- latest version from unpkg -->
<script src="https://unpkg.com/xmlbuilder2/lib/xmlbuilder2.min.js"></script>

Donations:

Please consider becoming a backer or sponsor to help support development.

@monodrom/monodromaggregation-ssml@frondjs/dev-opsplunetsunat-soap-client@dottjt/datareade_data@techstars/contentfulhotelizer_satellitebranch-cli-toolmyfiteco-apimhz-backvideo-template@everything-registry/sub-chunk-3186tap-junitsysnetsvelte-sitemapteaching-assistantwix-msiwa-automatewicked-saml2-jsxml2customjswsxpxdvplatform-toolsxdvplatform-walletsfdx-git-deltastandard-version-updater-pomstandard-version-updater-xmltestingbot-cypress-clivtk.jsvscode-html-to-docxvtk-js-hurwavtk-ugs.jsvibranium-clivideo-template-modelvoxtelesys-nodeeurope-xml-dd-generatorjsx-xmljbpr-libjunit-report-mergerkmlifyifesa-dgi-factura-electronicaindi-clientinfusionsoft-api-auth-headersinfusionsoft-auth-headershtml-to-docx-nudgelabshtml-to-docx-plushtml-to-docx-tshtml-to-docx-typescripthtml-to-docx-updatehtml-to-docx-updateshtml-to-docxhtml-to-docx-bufferhtml-to-docx-cehtml-to-docx-dinnyehtml-to-docx-forkedhtml-to-docx-hubhtml-to-docx-litehtmlsanitycheckhexo-seohapi-caldavinhaus_coreios-remote-build-serverlightning-flow-scanner-coreliteofdmarkdown-link-checkmca-lazylib-ts@xcommerceweb/google-merchant-feed@web-atoms/unit-test@xmorse/jsx-xml@xmlxyz/rsskit@tupaca/html-to-docx@thoughtindustries/saml2-js@turbodocx/html-to-docx@thewtex/vtk.js-esm@timrauhut/feedify@themachinarium/google-merchant-feed@vijhhh2/saml2js@vijhhh2/saml2-js@yellowtree/webpack-plugin-xlf@xlsft/html-docx-v2@xomlo/xomlo-models-glami@xomlo/xomlo-models-prestashop@zen-browser/surfer@zazuko/trifid-plugin-ckanaem-packager-v2agora-app-builder-cliagora-app-builder-cli-testaditya-app-builder-clianimaljam.jsapex-code-coverage-transformer@olekbruks/sort-resx@nqminds/crop-doc-module-m2@nudgelabs/html-to-docx-nudgelabs@nxrocks/common-jvm@nx-boat-tools/dotnet@open-wa/wa-automate@pazy/saml2-js@ninanfm/feed@pixelplex/sms-service@peertube/saml2-js
3.1.1

3 years ago

3.1.0

3 years ago

3.0.2

4 years ago

3.0.1

4 years ago

3.0.0

4 years ago

2.4.1

5 years ago

2.4.0

5 years ago

2.3.1

5 years ago

2.3.0

5 years ago

2.2.0

5 years ago

2.1.7

5 years ago

2.1.6

5 years ago

2.1.4

5 years ago

2.1.5

5 years ago

2.1.3

5 years ago

2.1.2

6 years ago

2.1.1

6 years ago

2.1.0

6 years ago

2.0.0

6 years ago

1.8.1

6 years ago

1.8.0

6 years ago

1.7.0

6 years ago

1.6.0

6 years ago

1.5.0

6 years ago

1.4.3

6 years ago

1.4.2

6 years ago

1.4.1

6 years ago

1.4.0

6 years ago

1.3.0

6 years ago

1.2.1

6 years ago

1.2.0

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

0.0.13

6 years ago

1.0.0

6 years ago

1.1.0

6 years ago

0.0.14

6 years ago

0.0.12

6 years ago

0.0.11

6 years ago

0.0.10

6 years ago

0.0.9

6 years ago

0.0.7

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago