boomtjes

XML Tree manipulation

npm install boomtjes
4 downloads in the last week
17 downloads in the last month

Boomtjes Build Status

Boomtjes is a JavaScript library built for XML manipulation and XSD Schema validation. It depends on sax.js, loash.js, backbone.js and synths.js, and work on browser and CommonJS.

Goal

The original goal of Boomtjes is for helping me to work on a music score project. Boomtjes is currently been rewritten.

Usage

var source = '<hello><world a1="foo" a2="bar">Boomtjes</world>' +
                 '<e2>e2 content</e2>' +
                 '<e3><e3c1/><e3c2></e3c2><e3c3 a1="a"/></e3>' +
             '</hello>';

bj.parseXML(source, function (err, doc) {
    if (err) { throw (err); }

    doc.root().prefix('bj');

    var root = doc.root();
    root.prefix('bj');

    var el = new bj.Element('e3c1gc1', { grand: 'child'});
    root.children(2, 'children', 0, '#append', el);
    root.children(2, 'children', 2, 'text', '<HI THERE>')

    root.eachDescendant(function (el) { el.prefix('ha'); });

    console.log('root text:', root.text());

    var obj = JSON.parse(JSON.stringify(doc));
    console.log(util.inspect(obj, false, null, true));
    console.log('New XML:\n----------------\n' + doc);
});

The output will be

{ xml: { encoding: 'UTF8' },
  'bj:hello':
   [ { 'ha:world':
        { '$': { a1: 'foo', a2: 'bar' },
          _: 'Boomtjes' } },
     { 'ha:e2': 'e2 content' },
     { 'ha:e3':
        [ { 'ha:e3c1': { 'ha:e3c1gc1': { grand: 'child' } } },
          { 'ha:e3c2': null },
          { 'ha:e3c3':
             { '$': { a1: 'a' },
               _: '<HI THERE>' } } ] } ] }

New XML will be

<?xml version="1.0" encoding="UTF8"?>
<bj:hello>
  <ha:world a1="foo" a2="bar">Boomtjes</ha:world>
  <ha:e2>e2 content</ha:e2>
  <ha:e3>
    <ha:e3c1>
      <ha:e3c1gc1 grand="child"/>
      </ha:e3c1>
    <ha:e3c2/>
     <ha:e3c3 a1="a">&lt;HI THERE&gt;</ha:e3c3>
    </ha:e3>
  </bj:hello>

Examples

  • Use Boomtjes in browser: demo.html and demo/main.js
  • Use Boomtjes in Node: devel.js
npm loves you