3.1.1 • Published 2 years ago

xmlbuilder2 v3.1.1

Weekly downloads
104,347
License
MIT
Repository
github
Last release
2 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-node@andrew.trautmann/sfdx-deploy-tools@dotaddon/packer@drawmoon/html-to-docx@dshiells/saml2-js@crow-browser/seed@concepto/dsl_parser@concepto/eb@cubejs-backend/maven@cyclonedx/cyclonedx-npm@cyclonedx/webpack-plugin@cutls/platform-colors@deluksic/cyclonedx-npm@dottjt/datareade@dottjt/mediareade@bnsights-test/test-utilities@bnsights/bbsf-utilities@canary-109cafe/jbpr@prestashop-core/ws-client@pazy/saml2-jseurope-xml-dd-generatorjsx-xmljbpr-libjunit-report-mergerkmlifywa-frikzstylelint-checkstyle-reporterstylelint-formatter-junitsquergesrt2subtitlesssml-documentue.saml2-jsthree-bcfusps-webtools-promise@airlookjs/node-healthcheck@angga30prabu/wa-modified@analogjs/vite-plugin-nitro@adobe/asset-compute-xmp@adrivermeulen/yis@blookanoo/integration-p-sp@boalang/boa-api@bspeice/vite-plugin-blog@cdk8s-extensions/argo-rollout@clausehq/flows-step-jsontoxml@clausehq/flows-step-xmltojson@chalifour.dev/iptv@adalat-ai/html-to-docx@cloudstek/yarn-audit-junit@codibri/vendure-plugin-product-catalog-feed@dec112/cap-ts@darioackermann/saml2-jsxomlo-models-prestashopzoom-products-xmluniversal-crypto-wallettsd-extra-cli@ebplants/gis-tools@haibun/out-review@haibun/out-xunit@halftome/szamlazz-client@forwardemail/caldav-adapter@hubo99/gdal-async@hoppscotch/cli@hylimo/diagram-render-svg@fluffy-mods/mod-cli@gaia-x/gx-trusted-list-serializer@ekhineo/iso20022.js
3.1.1

2 years ago

3.1.0

2 years ago

3.0.2

4 years ago

3.0.1

4 years ago

3.0.0

4 years ago

2.4.1

4 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

5 years ago

2.1.1

5 years ago

2.1.0

5 years ago

2.0.0

5 years ago

1.8.1

5 years ago

1.8.0

5 years ago

1.7.0

5 years ago

1.6.0

5 years ago

1.5.0

5 years ago

1.4.3

5 years ago

1.4.2

5 years ago

1.4.1

5 years ago

1.4.0

5 years ago

1.3.0

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

0.0.13

5 years ago

1.0.0

5 years ago

1.1.0

5 years ago

0.0.14

5 years ago

0.0.12

5 years ago

0.0.11

5 years ago

0.0.10

5 years ago

0.0.9

5 years ago

0.0.7

5 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