boomtjes

XML Tree manipulation

Boomtjes

Boomtjes - a JavaScript library for XML Tree with XSD Schema validation.

Boomtjes depends on sax.js, loash.js and backbone.js, and work on browser and CommonJS such as NodeJS. The design of Boomtjes is influenced by BackboneJS.

The original goal of Boomtjes is for helping me to work on a music score project[ref]. Since there are more than four hundred element in MusicXML[ref] to deal with.

Current Boomtjes can read XML files, manipulate the data model, convert it to a JSON representation and convert the data model back to XML as well.

The status of all API's are in the level of experimental. This project is on developing...

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 (errdoc) {
    if (err) { throw (err); }
    doc.root().prefix('bj');
 
    var root = doc.root();
    root.prefix('bj');
 
    var el = new bj.Element('e3c1gc1', { grand: 'child'});
    root.childAt(2).firstChild().append(el);
 
    root.eachDescendant(function (el) {
        if (el instanceof bj.Element) {
            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: { version: '1.0', 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' } } ] } ] }

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"/>
    </ha:e3>
  </bj:hello>
  • Use Boomtjes in browser

    demo.html
    demo/main.js
  • Use Boomtjes in NodeJS

    devel.js

For insperation...