0.2.1 • Published 11 years ago

boomtjes v0.2.1

Weekly downloads
10
License
-
Repository
github
Last release
11 years ago

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.

Goal

The original goal of Boomtjes is for helping me to work on a music score projectref. Since there are more than four hundred element in MusicXMLref 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.

API Documentation

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

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.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>

Examples

  • Use Boomtjes in browser

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

    devel.js

Brainstorming

For insperation...

0.2.1

11 years ago

0.2.0

11 years ago

0.1.2

11 years ago

0.1.1

11 years ago