Validate XML or Parse XML to JS/JSON very fast without C/C++ based libraries
npm install fast-xml-parser-ordered$xml
the
quick
brown
fox
jumps
over
the lazy dog
`
Result:
`$json
{
"tag":"!xml",
"children":[
{
"tag":"note",
"children":[
{
"tag":"text",
"#text":"the"
},
{
"tag":"text",
"#text":"quick"
},
{
"tag":"b",
"#text":"brown"
},
{
"tag":"b",
"#text":"fox"
},
{
"tag":"i",
"#text":"jumps"
},
{
"tag":"b",
"children":[
{
"tag":"i",
"#text":"over"
}
]
},
{
"tag":"text",
"#text":"the lazy dog"
}
]
}
]
}
`
-----
fast-xml-parser
Validate XML, Parse XML to JS/JSON and vice versa, or parse XML to Nimn rapidly without C/C++ based libraries and no callback
> This project welcomes contributors. If you have a feature you'd like to see implemented or a bug you'd liked fixed, the best and fastest way to make that happen is to implement it and submit a PR. Basic knowledge of JS is sufficient. Feel free to ask for any guidance.
Users
List of some applications/projects using Fast XML Parser. (Raise an issue to submit yours)
$3
  
[![NPM quality][quality-image]][quality-url]



[quality-image]: http://npm.packagequality.com/shield/fast-xml-parser.svg?style=flat-square
[quality-url]: http://packagequality.com/#?package=fast-xml-parser
$3
* Validate XML data syntactically
* Transform XML to JSON or Nimn
* Transform JSON back to XML
* Works with node packages, in browser, and in CLI (press try me button above for demo)
* Faster than any pure JS implementation.
* It can handle big files (tested up to 100mb).
* Various options are available to customize the transformation
* You can parse CDATA as separate property.
* You can prefix attributes or group them to separate property. Or can ignore them from result completely.
* You can parse tag's or attribute's value to primitive type: string, integer, float, hexadecimal, or boolean. And can optionally decode for HTML char.
* You can remove namespace from tag or attribute name while parsing
* It supports boolean attributes, if configured.
How to use
To use it in NPM package install it first
$npm install fast-xml-parser or using yarn $yarn add fast-xml-parser
To use it from CLI Install it globally with -g option.
$npm install fast-xml-parser -g
To use it on a webpage include it from a CDN
$3
`js
var jsonObj = parser.parse(xmlData [,options] );
`
`js
var parser = require('fast-xml-parser');
var he = require('he');
var options = {
attributeNamePrefix : "@_",
attrNodeName: "attr", //default is 'false'
textNodeName : "#text",
ignoreAttributes : true,
ignoreNameSpace : false,
allowBooleanAttributes : false,
parseNodeValue : true,
parseAttributeValue : false,
trimValues: true,
cdataTagName: "__cdata", //default is 'false'
cdataPositionChar: "\\c",
localeRange: "", //To support non english character in tag/attribute values.
parseTrueNumberOnly: false,
attrValueProcessor: a => he.decode(a, {isAttributeValue: true}),//default is a=>a
tagValueProcessor : a => he.decode(a) //default is a=>a
};
if( parser.validate(xmlData) === true) { //optional (it'll return an object in case it's not valid)
var jsonObj = parser.parse(xmlData,options);
}
// Intermediate obj
var tObj = parser.getTraversalObj(xmlData,options);
var jsonObj = parser.convertToJson(tObj,options);
`
#### Note: he library is used in this example
OPTIONS :
* attributeNamePrefix : prepend given string to attribute name for identification
* attrNodeName: (Valid name) Group all the attributes as properties of given name.
* ignoreAttributes : Ignore attributes to be parsed.
* ignoreNameSpace : Remove namespace string from tag and attribute names.
* allowBooleanAttributes : a tag can have attributes without any value
* parseNodeValue : Parse the value of text node to float, integer, or boolean.
* parseAttributeValue : Parse the value of an attribute to float, integer, or boolean.
* trimValues : trim string values of an attribute or node
* decodeHTMLchar : This options has been removed from 3.3.4. Instead, use tagValueProcessor, and attrValueProcessor. See above example.
* cdataTagName : If specified, parser parse CDATA as nested tag instead of adding it's value to parent tag.
* cdataPositionChar : It'll help to covert JSON back to XML without losing CDATA position.
* localeRange: Parser will accept non-English character in tag or attribute name. Check #87 for more detail. Eg localeRange: "a-zA-Zа-яёА-ЯЁ"
* parseTrueNumberOnly: if true then values like "+123", or "0123" will not be parsed as number.
* tagValueProcessor : Process tag value during transformation. Like HTML decoding, word capitalization, etc. Applicable in case of string only.
* attrValueProcessor : Process attribute value during transformation. Like HTML decoding, word capitalization, etc. Applicable in case of string only.
* stopNodes : an array of tag names which are not required to be parsed. Instead their values are parsed as string.
To use from command line
`bash
$xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json]
$cat xmlfile.xml | xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json]
`
* -ns : To include namespaces (by default ignored)
* -a : To ignore attributes
* -c : To ignore value conversion (i.e. "-3" will not be converted to number -3)
* -v : validate before parsing
* -V : only validate
To use it on webpage
`js
var result = parser.validate(xmlData);
if (result !== true) console.log(result.err);
var jsonObj = parser.parse(xmlData);
`
$3
`js
var Parser = require("fast-xml-parser").j2xParser;
//default options need not to set
var defaultOptions = {
attributeNamePrefix : "@_",
attrNodeName: "@", //default is false
textNodeName : "#text",
ignoreAttributes : true,
cdataTagName: "__cdata", //default is false
cdataPositionChar: "\\c",
format: false,
indentBy: " ",
supressEmptyNode: false,
tagValueProcessor: a=> he.encode(a, { useNamedReferences: true}),// default is a=>a
attrValueProcessor: a=> he.encode(a, {isAttributeValue: isAttribute, useNamedReferences: true})// default is a=>a
};
var parser = new Parser(defaultOptions);
var xml = parser.parse(json_or_js_obj);
`
OPTIONS :
With the correct options, you can get the almost original XML without losing any information.
* attributeNamePrefix : Identify attributes with this prefix otherwise treat them as a tag.
* attrNodeName: Identify attributes when they are grouped under single property.
* ignoreAttributes : Don't check for attributes. Treats everything as tag.
* encodeHTMLchar : This option has been removed from 3.3.4. Use tagValueProcessor, and attrValueProcessor instead. See above example.
* cdataTagName : If specified, parse matching tag as CDATA
* cdataPositionChar : Identify the position where CDATA tag should be placed. If it is blank then CDATA will be added in the last of tag's value.
* format : If set to true, then format the XML output.
* indentBy : indent by this char when format is set to true
* supressEmptyNode : If set to true`, tags with no value (text or nested tags) are written as self closing tags.