🪦 RIP Axway Amplify Titanium (2010 - 2022)
Configurable, lightweight XML to JSON converter for Titanium native mobile apps. Based on https://github.com/metatribal/xmlToJSON by metatribal
- no external dependencies
- small (~3kb minified)
- simple parsing. pass either a string or xml node and get back a javascript object ( use JSON.stringify(obj) to get the string representation )
- supports attributes, text, cdata, namespaces, default namespaces, attributes with namespaces... you get the idea
- lots of rendering of options
- consistent, predictable output
- browser support - it works on IE 9+, and nearly every version of Chrome, Safari, and Firefox as well as iOS, Android, and Blackberry. (xmlToJSON will work for IE 7/8 as well if you set the xmlns option to false)
Install using npm:
npm install @titanium/xml2json
const xml2json = require('@titanium/xml2json');
const testString = '<xml><a>It Works!</a></xml>'; // get some xml (string or document/node)
const result = xml2json.parseString(testString); // parse
The (prettified) result of the above code is
{
"xml": {
"a": [
{
"text": "It Works!"
}
]
}
}
// These are the option defaults
var options = {
mergeCDATA: true, // extract cdata and merge with text nodes
grokAttr: true, // convert truthy attributes to boolean, etc
grokText: true, // convert truthy text/attr to boolean, etc
normalize: true, // collapse multiple spaces to single space
xmlns: true, // include namespaces as attributes in output
namespaceKey: '_ns', // tag name for namespace objects
textKey: '_text', // tag name for text nodes
valueKey: '_value', // tag name for attribute values
attrKey: '_attr', // tag for attr groups
cdataKey: '_cdata', // tag for cdata nodes (ignored if mergeCDATA is true)
attrsAsObject: true, // if false, key is used as prefix to name, set prefix to '' to merge children and attrs.
stripAttrPrefix: true, // remove namespace prefixes from attributes
stripElemPrefix: true, // for elements of same name in diff namespaces, you can enable namespaces and access the nskey property
childrenAsArray: true // force children into arrays
};
// you can change the defaults by passing the parser an options object of your own
var myOptions = {
mergeCDATA: false,
xmlns: false,
attrsAsObject: false
}
result = xml2json.parseString(xmlString, myOptions);
A more complicated example (with xmlns: true)
<?xml version="1.0" encoding="UTF-8"?>
<xml xmlns="http://default.namespace.uri">
<a>
<b id="1">one</b>
<b id="2"><![CDATA[some <cdata>]]>two</b>
<ns:c xmlns:ns="http://another.namespace" ns:id="3">three</ns:c>
</a>
</xml>
results in
{
"xml": [{
"attr": {
"xmlns": {
"value": "http://default.namespace.uri"
}
},
"a": [{
"b": [{
"attr": {
"id": {
"value": 1
}
},
"text": "one"
}, {
"attr": {
"id": {
"value": 2
}
},
"text": "some <cdata>two"
}],
"c": [{
"attr": {
"xmlns:ns": {
"value": "http://another.namespace"
},
"id": {
"value": 3
}
},
"text": "three"
}]
}]
}]
}
- Titanium Mobile - Open-source tool for building powerful, cross-platform native apps with JavaScript.
- Alloy - MVC framework built on top of Titanium Mobile.
- Appcelerator - Installer for the Appcelerator Platform tool
Have an idea or a comment? Join in the conversation here!
Alloy is developed by Appcelerator and the community and is Copyright © 2012-Present by Appcelerator, Inc. All Rights Reserved.
Alloy is made available under the Apache Public License, version 2. See their license file for more information.
Appcelerator is a registered trademark of Appcelerator, Inc. Titanium is a registered trademark of Appcelerator, Inc. Please see the LEGAL information about using trademarks, privacy policy, terms of usage and other legal information at http://www.appcelerator.com/legal.