A basic framework for translating XML to dev-friendly JSON and back again, and can be used both in the browser and in node.
$ npm install jxt
First, we define the mapping between our XML and desired JSON:
// Create a registry instance that will track our definitions and
// extensions.
var jxt = require('jxt').createRegistry();
var helpers = jxt.utils;
var Message = jxt.define({
name: 'message',
namespace: 'jabber:client',
element: 'message',
fields: {
to: helpers.attribute('to'),
from: helpers.attribute('from'),
subject: helpers.textSub('jabber:client', 'subject'),
body: helpers.textSub('jabber:client', 'body')
}
});
Now, we can create Message
objects, and set fields and treat it just like JSON, and it will map it to XML.
var msg = new Message();
msg.to = 'foo@example.com';
msg.body = 'giving a demo of jxt';
console.log(msg.toJSON());
console.log(msg.toString());
// {to: 'foo@example.com', body: 'giving a demo of jxt'}
// <message xmlns="jabber:client" to="foo@example.com"><body>giving a demo of jxt</body></message>
Mappings can be extended:
// jxt is our registry object
var Ext = jxt.define({
name: 'demoExt',
namespace: 'jxt',
element: 'demo',
fields: {
text: jxt.text()
}
});
jxt.extend(Message, Ext);
var msg = new Message();
msg.demoExt.text = 'an extension';
console.log(msg.toJSON());
console.log(msg.toString());
// {demoExt: {text: 'an extension'}}
// <message xmlns="jabber:client"><demo xmlns="jxt">an extension</demo></message>
- attribute
- b64Text
- boolAttribute
- boolSub
- boolSubAttribute
- dateAttribute
- dateSub
- dateSubAttribute
- enumSub
- langAttribute
- multiTextSub
- numberAttribute
- numberSub
- numberSubAttribute
- subAttribute
- langTextSub
- textSub
- text
If you like this, follow @lancestout on twitter.