Repository files navigation

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)

Join this project as collaborator / maintainer.

Backers on Open CollectiveSponsors on Open CollectiveKnown VulnerabilitiesNPM qualityTravis ci Build StatusCoverage StatusTry meNPM total downloads

Become a Patron!Stubmatic donate button

Main Features

FXP logo

  • 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

XML to JSON

varjsonObj=parser.parse(xmlData[,options]);
varparser=require('fast-xml-parser');varhe=require('he');varoptions={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=>atagValueProcessor : 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)varjsonObj=parser.parse(xmlData,options);}// Intermediate objvartObj=parser.getTraversalObj(xmlData,options);varjsonObj=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
$xml2js [-ns|-a|-c|-v|-V] <filename> [-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
varresult=parser.validate(xmlData);if(result!==true)console.log(result.err);varjsonObj=parser.parse(xmlData);

JSON / JS Object to XML

varParser=require("fast-xml-parser").j2xParser;//default options need not to setvardefaultOptions={attributeNamePrefix : "@_",attrNodeName: "@",//default is falsetextNodeName : "#text",ignoreAttributes : true,cdataTagName: "__cdata",//default is falsecdataPositionChar: "\\c",format: false,indentBy: " ",supressEmptyNode: false,tagValueProcessor: a=>he.encode(a,{useNamedReferences: true}),// default is a=>aattrValueProcessor: a=>he.encode(a,{isAttributeValue: isAttribute,useNamedReferences: true})// default is a=>a};varparser=newParser(defaultOptions);varxml=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.
  • tagValueProcessor : Process tag value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.
  • attrValueProcessor : Process attribute value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.

Benchmark

XML to JSON

npm_xml2json_compare

report
file sizefxp 3.0 validator (rps)fxp 3.0 parser (rps)xml2js 0.4.19 (rps)
1.5k16581.0675814032.093234615.930805
1.5m14918.4779313.233660985.90682005
13m1.8344792351.135582008-1
1.3k with CDATA30583.3531943160.523428398.556349
1.3m with CDATA27.2926647152.688770097.966000795
1.6k with cdata,prolog,doctype27690.2608241433.985477872.399268
98m0.084738581480.2600104004-1
  • -1 indicates error or incorrect output.

JSON to XML

npm_xml2json_compare

report
file sizefxp 3.2 js to xmlxml2js 0.4.19 builder
1.3k160148.980110384.99401
1.1m173.63748318.611884025

Limitations

Currently FXP fails to parse XML with attributes has ">" in the value. This problem is left open as change in regex for its fix is degrading the performance. And the parser become very slow in case of long attrbute names.

Worth to mention

  • BigBit standard) : A standard to reprent any number in the universe in comparitively less space and without precision loss. A standard to save space to represent any text string in comparision of UTF encoding.
  • imglab : Speedup and simplify image labeling / annotation. Supports multiple formats, one click annotation, easy interface and much more. There are more than 20k images are annotated every month.
  • अनुमार्गक (anumargak) : The fastest and simple router for node js web frameworks with many unique features.
  • stubmatic : A stub server to mock behaviour of HTTP(s) / REST / SOAP services, incuding DynamoDB calls. You can also mock binary formats.
  • मुनीम (Muneem) : A webframework made for all team members. Faster tha fastify, express, koa, hapi and others.
  • शब्दावली (shabdawali) : Amazing human like typing effects beyond your imagination.

Contributors

This project exists thanks to all the people who contribute. [Contribute].

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

About

Validate XML, Parse XML to JS/JSON and vise versa, or parse XML to Nimn rapidly without C/C++ based libraries and no callback

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

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)

Join this project as collaborator / maintainer.

Backers on Open CollectiveSponsors on Open CollectiveKnown VulnerabilitiesNPM qualityTravis ci Build StatusCoverage StatusTry meNPM total downloads

Become a Patron!Stubmatic donate button

Main Features

FXP logo

  • 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

XML to JSON

varjsonObj=parser.parse(xmlData[,options]);
varparser=require('fast-xml-parser');varhe=require('he');varoptions={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=>atagValueProcessor : 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)varjsonObj=parser.parse(xmlData,options);}// Intermediate objvartObj=parser.getTraversalObj(xmlData,options);varjsonObj=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
$xml2js [-ns|-a|-c|-v|-V] <filename> [-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
varresult=parser.validate(xmlData);if(result!==true)console.log(result.err);varjsonObj=parser.parse(xmlData);

JSON / JS Object to XML

varParser=require("fast-xml-parser").j2xParser;//default options need not to setvardefaultOptions={attributeNamePrefix : "@_",attrNodeName: "@",//default is falsetextNodeName : "#text",ignoreAttributes : true,cdataTagName: "__cdata",//default is falsecdataPositionChar: "\\c",format: false,indentBy: " ",supressEmptyNode: false,tagValueProcessor: a=>he.encode(a,{useNamedReferences: true}),// default is a=>aattrValueProcessor: a=>he.encode(a,{isAttributeValue: isAttribute,useNamedReferences: true})// default is a=>a};varparser=newParser(defaultOptions);varxml=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.
  • tagValueProcessor : Process tag value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.
  • attrValueProcessor : Process attribute value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.

Benchmark

XML to JSON

npm_xml2json_compare

report
file sizefxp 3.0 validator (rps)fxp 3.0 parser (rps)xml2js 0.4.19 (rps)
1.5k16581.0675814032.093234615.930805
1.5m14918.4779313.233660985.90682005
13m1.8344792351.135582008-1
1.3k with CDATA30583.3531943160.523428398.556349
1.3m with CDATA27.2926647152.688770097.966000795
1.6k with cdata,prolog,doctype27690.2608241433.985477872.399268
98m0.084738581480.2600104004-1
  • -1 indicates error or incorrect output.

JSON to XML

npm_xml2json_compare

report
file sizefxp 3.2 js to xmlxml2js 0.4.19 builder
1.3k160148.980110384.99401
1.1m173.63748318.611884025

Limitations

Currently FXP fails to parse XML with attributes has ">" in the value. This problem is left open as change in regex for its fix is degrading the performance. And the parser become very slow in case of long attrbute names.

Worth to mention

  • BigBit standard) : A standard to reprent any number in the universe in comparitively less space and without precision loss. A standard to save space to represent any text string in comparision of UTF encoding.
  • imglab : Speedup and simplify image labeling / annotation. Supports multiple formats, one click annotation, easy interface and much more. There are more than 20k images are annotated every month.
  • अनुमार्गक (anumargak) : The fastest and simple router for node js web frameworks with many unique features.
  • stubmatic : A stub server to mock behaviour of HTTP(s) / REST / SOAP services, incuding DynamoDB calls. You can also mock binary formats.
  • मुनीम (Muneem) : A webframework made for all team members. Faster tha fastify, express, koa, hapi and others.
  • शब्दावली (shabdawali) : Amazing human like typing effects beyond your imagination.

Contributors

This project exists thanks to all the people who contribute. [Contribute].

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

About

Validate XML, Parse XML to JS/JSON and vise versa, or parse XML to Nimn rapidly without C/C++ based libraries and no callback

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

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)

Join this project as collaborator / maintainer.

Backers on Open CollectiveSponsors on Open CollectiveKnown VulnerabilitiesNPM qualityTravis ci Build StatusCoverage StatusTry meNPM total downloads

Become a Patron!Stubmatic donate button

Main Features

FXP logo

  • 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

XML to JSON

varjsonObj=parser.parse(xmlData[,options]);
varparser=require('fast-xml-parser');varhe=require('he');varoptions={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=>atagValueProcessor : 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)varjsonObj=parser.parse(xmlData,options);}// Intermediate objvartObj=parser.getTraversalObj(xmlData,options);varjsonObj=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
$xml2js [-ns|-a|-c|-v|-V] <filename> [-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
varresult=parser.validate(xmlData);if(result!==true)console.log(result.err);varjsonObj=parser.parse(xmlData);

JSON / JS Object to XML

varParser=require("fast-xml-parser").j2xParser;//default options need not to setvardefaultOptions={attributeNamePrefix : "@_",attrNodeName: "@",//default is falsetextNodeName : "#text",ignoreAttributes : true,cdataTagName: "__cdata",//default is falsecdataPositionChar: "\\c",format: false,indentBy: " ",supressEmptyNode: false,tagValueProcessor: a=>he.encode(a,{useNamedReferences: true}),// default is a=>aattrValueProcessor: a=>he.encode(a,{isAttributeValue: isAttribute,useNamedReferences: true})// default is a=>a};varparser=newParser(defaultOptions);varxml=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.
  • tagValueProcessor : Process tag value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.
  • attrValueProcessor : Process attribute value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.

Benchmark

XML to JSON

npm_xml2json_compare

report
file sizefxp 3.0 validator (rps)fxp 3.0 parser (rps)xml2js 0.4.19 (rps)
1.5k16581.0675814032.093234615.930805
1.5m14918.4779313.233660985.90682005
13m1.8344792351.135582008-1
1.3k with CDATA30583.3531943160.523428398.556349
1.3m with CDATA27.2926647152.688770097.966000795
1.6k with cdata,prolog,doctype27690.2608241433.985477872.399268
98m0.084738581480.2600104004-1
  • -1 indicates error or incorrect output.

JSON to XML

npm_xml2json_compare

report
file sizefxp 3.2 js to xmlxml2js 0.4.19 builder
1.3k160148.980110384.99401
1.1m173.63748318.611884025

Limitations

Currently FXP fails to parse XML with attributes has ">" in the value. This problem is left open as change in regex for its fix is degrading the performance. And the parser become very slow in case of long attrbute names.

Worth to mention

  • BigBit standard) : A standard to reprent any number in the universe in comparitively less space and without precision loss. A standard to save space to represent any text string in comparision of UTF encoding.
  • imglab : Speedup and simplify image labeling / annotation. Supports multiple formats, one click annotation, easy interface and much more. There are more than 20k images are annotated every month.
  • अनुमार्गक (anumargak) : The fastest and simple router for node js web frameworks with many unique features.
  • stubmatic : A stub server to mock behaviour of HTTP(s) / REST / SOAP services, incuding DynamoDB calls. You can also mock binary formats.
  • मुनीम (Muneem) : A webframework made for all team members. Faster tha fastify, express, koa, hapi and others.
  • शब्दावली (shabdawali) : Amazing human like typing effects beyond your imagination.

Contributors

This project exists thanks to all the people who contribute. [Contribute].

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

About

Validate XML, Parse XML to JS/JSON and vise versa, or parse XML to Nimn rapidly without C/C++ based libraries and no callback

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

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)

Join this project as collaborator / maintainer.

Backers on Open CollectiveSponsors on Open CollectiveKnown VulnerabilitiesNPM qualityTravis ci Build StatusCoverage StatusTry meNPM total downloads

Become a Patron!Stubmatic donate button

Main Features

FXP logo

  • 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

XML to JSON

varjsonObj=parser.parse(xmlData[,options]);
varparser=require('fast-xml-parser');varhe=require('he');varoptions={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=>atagValueProcessor : 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)varjsonObj=parser.parse(xmlData,options);}// Intermediate objvartObj=parser.getTraversalObj(xmlData,options);varjsonObj=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
$xml2js [-ns|-a|-c|-v|-V] <filename> [-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
varresult=parser.validate(xmlData);if(result!==true)console.log(result.err);varjsonObj=parser.parse(xmlData);

JSON / JS Object to XML

varParser=require("fast-xml-parser").j2xParser;//default options need not to setvardefaultOptions={attributeNamePrefix : "@_",attrNodeName: "@",//default is falsetextNodeName : "#text",ignoreAttributes : true,cdataTagName: "__cdata",//default is falsecdataPositionChar: "\\c",format: false,indentBy: " ",supressEmptyNode: false,tagValueProcessor: a=>he.encode(a,{useNamedReferences: true}),// default is a=>aattrValueProcessor: a=>he.encode(a,{isAttributeValue: isAttribute,useNamedReferences: true})// default is a=>a};varparser=newParser(defaultOptions);varxml=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.
  • tagValueProcessor : Process tag value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.
  • attrValueProcessor : Process attribute value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.

Benchmark

XML to JSON

npm_xml2json_compare

report
file sizefxp 3.0 validator (rps)fxp 3.0 parser (rps)xml2js 0.4.19 (rps)
1.5k16581.0675814032.093234615.930805
1.5m14918.4779313.233660985.90682005
13m1.8344792351.135582008-1
1.3k with CDATA30583.3531943160.523428398.556349
1.3m with CDATA27.2926647152.688770097.966000795
1.6k with cdata,prolog,doctype27690.2608241433.985477872.399268
98m0.084738581480.2600104004-1
  • -1 indicates error or incorrect output.

JSON to XML

npm_xml2json_compare

report
file sizefxp 3.2 js to xmlxml2js 0.4.19 builder
1.3k160148.980110384.99401
1.1m173.63748318.611884025

Limitations

Currently FXP fails to parse XML with attributes has ">" in the value. This problem is left open as change in regex for its fix is degrading the performance. And the parser become very slow in case of long attrbute names.

Worth to mention

  • BigBit standard) : A standard to reprent any number in the universe in comparitively less space and without precision loss. A standard to save space to represent any text string in comparision of UTF encoding.
  • imglab : Speedup and simplify image labeling / annotation. Supports multiple formats, one click annotation, easy interface and much more. There are more than 20k images are annotated every month.
  • अनुमार्गक (anumargak) : The fastest and simple router for node js web frameworks with many unique features.
  • stubmatic : A stub server to mock behaviour of HTTP(s) / REST / SOAP services, incuding DynamoDB calls. You can also mock binary formats.
  • मुनीम (Muneem) : A webframework made for all team members. Faster tha fastify, express, koa, hapi and others.
  • शब्दावली (shabdawali) : Amazing human like typing effects beyond your imagination.

Contributors

This project exists thanks to all the people who contribute. [Contribute].

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

About

Validate XML, Parse XML to JS/JSON and vise versa, or parse XML to Nimn rapidly without C/C++ based libraries and no callback

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

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)

Join this project as collaborator / maintainer.

Backers on Open CollectiveSponsors on Open CollectiveKnown VulnerabilitiesNPM qualityTravis ci Build StatusCoverage StatusTry meNPM total downloads

Become a Patron!Stubmatic donate button

Main Features

FXP logo

  • 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

XML to JSON

varjsonObj=parser.parse(xmlData[,options]);
varparser=require('fast-xml-parser');varhe=require('he');varoptions={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=>atagValueProcessor : 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)varjsonObj=parser.parse(xmlData,options);}// Intermediate objvartObj=parser.getTraversalObj(xmlData,options);varjsonObj=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
$xml2js [-ns|-a|-c|-v|-V] <filename> [-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
varresult=parser.validate(xmlData);if(result!==true)console.log(result.err);varjsonObj=parser.parse(xmlData);

JSON / JS Object to XML

varParser=require("fast-xml-parser").j2xParser;//default options need not to setvardefaultOptions={attributeNamePrefix : "@_",attrNodeName: "@",//default is falsetextNodeName : "#text",ignoreAttributes : true,cdataTagName: "__cdata",//default is falsecdataPositionChar: "\\c",format: false,indentBy: " ",supressEmptyNode: false,tagValueProcessor: a=>he.encode(a,{useNamedReferences: true}),// default is a=>aattrValueProcessor: a=>he.encode(a,{isAttributeValue: isAttribute,useNamedReferences: true})// default is a=>a};varparser=newParser(defaultOptions);varxml=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.
  • tagValueProcessor : Process tag value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.
  • attrValueProcessor : Process attribute value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.

Benchmark

XML to JSON

npm_xml2json_compare

report
file sizefxp 3.0 validator (rps)fxp 3.0 parser (rps)xml2js 0.4.19 (rps)
1.5k16581.0675814032.093234615.930805
1.5m14918.4779313.233660985.90682005
13m1.8344792351.135582008-1
1.3k with CDATA30583.3531943160.523428398.556349
1.3m with CDATA27.2926647152.688770097.966000795
1.6k with cdata,prolog,doctype27690.2608241433.985477872.399268
98m0.084738581480.2600104004-1
  • -1 indicates error or incorrect output.

JSON to XML

npm_xml2json_compare

report
file sizefxp 3.2 js to xmlxml2js 0.4.19 builder
1.3k160148.980110384.99401
1.1m173.63748318.611884025

Limitations

Currently FXP fails to parse XML with attributes has ">" in the value. This problem is left open as change in regex for its fix is degrading the performance. And the parser become very slow in case of long attrbute names.

Worth to mention

  • BigBit standard) : A standard to reprent any number in the universe in comparitively less space and without precision loss. A standard to save space to represent any text string in comparision of UTF encoding.
  • imglab : Speedup and simplify image labeling / annotation. Supports multiple formats, one click annotation, easy interface and much more. There are more than 20k images are annotated every month.
  • अनुमार्गक (anumargak) : The fastest and simple router for node js web frameworks with many unique features.
  • stubmatic : A stub server to mock behaviour of HTTP(s) / REST / SOAP services, incuding DynamoDB calls. You can also mock binary formats.
  • मुनीम (Muneem) : A webframework made for all team members. Faster tha fastify, express, koa, hapi and others.
  • शब्दावली (shabdawali) : Amazing human like typing effects beyond your imagination.

Contributors

This project exists thanks to all the people who contribute. [Contribute].

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

About

Validate XML, Parse XML to JS/JSON and vise versa, or parse XML to Nimn rapidly without C/C++ based libraries and no callback

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

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)

Join this project as collaborator / maintainer.

Backers on Open CollectiveSponsors on Open CollectiveKnown VulnerabilitiesNPM qualityTravis ci Build StatusCoverage StatusTry meNPM total downloads

Become a Patron!Stubmatic donate button

Main Features

FXP logo

  • 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

XML to JSON

varjsonObj=parser.parse(xmlData[,options]);
varparser=require('fast-xml-parser');varhe=require('he');varoptions={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=>atagValueProcessor : 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)varjsonObj=parser.parse(xmlData,options);}// Intermediate objvartObj=parser.getTraversalObj(xmlData,options);varjsonObj=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
$xml2js [-ns|-a|-c|-v|-V] <filename> [-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
varresult=parser.validate(xmlData);if(result!==true)console.log(result.err);varjsonObj=parser.parse(xmlData);

JSON / JS Object to XML

varParser=require("fast-xml-parser").j2xParser;//default options need not to setvardefaultOptions={attributeNamePrefix : "@_",attrNodeName: "@",//default is falsetextNodeName : "#text",ignoreAttributes : true,cdataTagName: "__cdata",//default is falsecdataPositionChar: "\\c",format: false,indentBy: " ",supressEmptyNode: false,tagValueProcessor: a=>he.encode(a,{useNamedReferences: true}),// default is a=>aattrValueProcessor: a=>he.encode(a,{isAttributeValue: isAttribute,useNamedReferences: true})// default is a=>a};varparser=newParser(defaultOptions);varxml=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.
  • tagValueProcessor : Process tag value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.
  • attrValueProcessor : Process attribute value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.

Benchmark

XML to JSON

npm_xml2json_compare

report
file sizefxp 3.0 validator (rps)fxp 3.0 parser (rps)xml2js 0.4.19 (rps)
1.5k16581.0675814032.093234615.930805
1.5m14918.4779313.233660985.90682005
13m1.8344792351.135582008-1
1.3k with CDATA30583.3531943160.523428398.556349
1.3m with CDATA27.2926647152.688770097.966000795
1.6k with cdata,prolog,doctype27690.2608241433.985477872.399268
98m0.084738581480.2600104004-1
  • -1 indicates error or incorrect output.

JSON to XML

npm_xml2json_compare

report
file sizefxp 3.2 js to xmlxml2js 0.4.19 builder
1.3k160148.980110384.99401
1.1m173.63748318.611884025

Limitations

Currently FXP fails to parse XML with attributes has ">" in the value. This problem is left open as change in regex for its fix is degrading the performance. And the parser become very slow in case of long attrbute names.

Worth to mention

  • BigBit standard) : A standard to reprent any number in the universe in comparitively less space and without precision loss. A standard to save space to represent any text string in comparision of UTF encoding.
  • imglab : Speedup and simplify image labeling / annotation. Supports multiple formats, one click annotation, easy interface and much more. There are more than 20k images are annotated every month.
  • अनुमार्गक (anumargak) : The fastest and simple router for node js web frameworks with many unique features.
  • stubmatic : A stub server to mock behaviour of HTTP(s) / REST / SOAP services, incuding DynamoDB calls. You can also mock binary formats.
  • मुनीम (Muneem) : A webframework made for all team members. Faster tha fastify, express, koa, hapi and others.
  • शब्दावली (shabdawali) : Amazing human like typing effects beyond your imagination.

Contributors

This project exists thanks to all the people who contribute. [Contribute].

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

About

Validate XML, Parse XML to JS/JSON and vise versa, or parse XML to Nimn rapidly without C/C++ based libraries and no callback

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

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)

Join this project as collaborator / maintainer.

Backers on Open CollectiveSponsors on Open CollectiveKnown VulnerabilitiesNPM qualityTravis ci Build StatusCoverage StatusTry meNPM total downloads

Become a Patron!Stubmatic donate button

Main Features

FXP logo

  • 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

XML to JSON

varjsonObj=parser.parse(xmlData[,options]);
varparser=require('fast-xml-parser');varhe=require('he');varoptions={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=>atagValueProcessor : 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)varjsonObj=parser.parse(xmlData,options);}// Intermediate objvartObj=parser.getTraversalObj(xmlData,options);varjsonObj=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
$xml2js [-ns|-a|-c|-v|-V] <filename> [-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
varresult=parser.validate(xmlData);if(result!==true)console.log(result.err);varjsonObj=parser.parse(xmlData);

JSON / JS Object to XML

varParser=require("fast-xml-parser").j2xParser;//default options need not to setvardefaultOptions={attributeNamePrefix : "@_",attrNodeName: "@",//default is falsetextNodeName : "#text",ignoreAttributes : true,cdataTagName: "__cdata",//default is falsecdataPositionChar: "\\c",format: false,indentBy: " ",supressEmptyNode: false,tagValueProcessor: a=>he.encode(a,{useNamedReferences: true}),// default is a=>aattrValueProcessor: a=>he.encode(a,{isAttributeValue: isAttribute,useNamedReferences: true})// default is a=>a};varparser=newParser(defaultOptions);varxml=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.
  • tagValueProcessor : Process tag value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.
  • attrValueProcessor : Process attribute value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.

Benchmark

XML to JSON

npm_xml2json_compare

report
file sizefxp 3.0 validator (rps)fxp 3.0 parser (rps)xml2js 0.4.19 (rps)
1.5k16581.0675814032.093234615.930805
1.5m14918.4779313.233660985.90682005
13m1.8344792351.135582008-1
1.3k with CDATA30583.3531943160.523428398.556349
1.3m with CDATA27.2926647152.688770097.966000795
1.6k with cdata,prolog,doctype27690.2608241433.985477872.399268
98m0.084738581480.2600104004-1
  • -1 indicates error or incorrect output.

JSON to XML

npm_xml2json_compare

report
file sizefxp 3.2 js to xmlxml2js 0.4.19 builder
1.3k160148.980110384.99401
1.1m173.63748318.611884025

Limitations

Currently FXP fails to parse XML with attributes has ">" in the value. This problem is left open as change in regex for its fix is degrading the performance. And the parser become very slow in case of long attrbute names.

Worth to mention

  • BigBit standard) : A standard to reprent any number in the universe in comparitively less space and without precision loss. A standard to save space to represent any text string in comparision of UTF encoding.
  • imglab : Speedup and simplify image labeling / annotation. Supports multiple formats, one click annotation, easy interface and much more. There are more than 20k images are annotated every month.
  • अनुमार्गक (anumargak) : The fastest and simple router for node js web frameworks with many unique features.
  • stubmatic : A stub server to mock behaviour of HTTP(s) / REST / SOAP services, incuding DynamoDB calls. You can also mock binary formats.
  • मुनीम (Muneem) : A webframework made for all team members. Faster tha fastify, express, koa, hapi and others.
  • शब्दावली (shabdawali) : Amazing human like typing effects beyond your imagination.

Contributors

This project exists thanks to all the people who contribute. [Contribute].

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

About

Validate XML, Parse XML to JS/JSON and vise versa, or parse XML to Nimn rapidly without C/C++ based libraries and no callback

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

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)

Join this project as collaborator / maintainer.

Backers on Open CollectiveSponsors on Open CollectiveKnown VulnerabilitiesNPM qualityTravis ci Build StatusCoverage StatusTry meNPM total downloads

Become a Patron!Stubmatic donate button

Main Features

FXP logo

  • 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

XML to JSON

varjsonObj=parser.parse(xmlData[,options]);
varparser=require('fast-xml-parser');varhe=require('he');varoptions={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=>atagValueProcessor : 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)varjsonObj=parser.parse(xmlData,options);}// Intermediate objvartObj=parser.getTraversalObj(xmlData,options);varjsonObj=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
$xml2js [-ns|-a|-c|-v|-V] <filename> [-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
varresult=parser.validate(xmlData);if(result!==true)console.log(result.err);varjsonObj=parser.parse(xmlData);

JSON / JS Object to XML

varParser=require("fast-xml-parser").j2xParser;//default options need not to setvardefaultOptions={attributeNamePrefix : "@_",attrNodeName: "@",//default is falsetextNodeName : "#text",ignoreAttributes : true,cdataTagName: "__cdata",//default is falsecdataPositionChar: "\\c",format: false,indentBy: " ",supressEmptyNode: false,tagValueProcessor: a=>he.encode(a,{useNamedReferences: true}),// default is a=>aattrValueProcessor: a=>he.encode(a,{isAttributeValue: isAttribute,useNamedReferences: true})// default is a=>a};varparser=newParser(defaultOptions);varxml=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.
  • tagValueProcessor : Process tag value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.
  • attrValueProcessor : Process attribute value during transformation. Like HTML encoding, word capitalization, etc. Applicable in case of string only.

Benchmark

XML to JSON

npm_xml2json_compare

report
file sizefxp 3.0 validator (rps)fxp 3.0 parser (rps)xml2js 0.4.19 (rps)
1.5k16581.0675814032.093234615.930805
1.5m14918.4779313.233660985.90682005
13m1.8344792351.135582008-1
1.3k with CDATA30583.3531943160.523428398.556349
1.3m with CDATA27.2926647152.688770097.966000795
1.6k with cdata,prolog,doctype27690.2608241433.985477872.399268
98m0.084738581480.2600104004-1
  • -1 indicates error or incorrect output.

JSON to XML

npm_xml2json_compare

report
file sizefxp 3.2 js to xmlxml2js 0.4.19 builder
1.3k160148.980110384.99401
1.1m173.63748318.611884025

Limitations

Currently FXP fails to parse XML with attributes has ">" in the value. This problem is left open as change in regex for its fix is degrading the performance. And the parser become very slow in case of long attrbute names.

Worth to mention

  • BigBit standard) : A standard to reprent any number in the universe in comparitively less space and without precision loss. A standard to save space to represent any text string in comparision of UTF encoding.
  • imglab : Speedup and simplify image labeling / annotation. Supports multiple formats, one click annotation, easy interface and much more. There are more than 20k images are annotated every month.
  • अनुमार्गक (anumargak) : The fastest and simple router for node js web frameworks with many unique features.
  • stubmatic : A stub server to mock behaviour of HTTP(s) / REST / SOAP services, incuding DynamoDB calls. You can also mock binary formats.
  • मुनीम (Muneem) : A webframework made for all team members. Faster tha fastify, express, koa, hapi and others.
  • शब्दावली (shabdawali) : Amazing human like typing effects beyond your imagination.

Contributors

This project exists thanks to all the people who contribute. [Contribute].

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

About

Validate XML, Parse XML to JS/JSON and vise versa, or parse XML to Nimn rapidly without C/C++ based libraries and no callback

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages