fast-xml-parser
Advanced tools
Comparing version 2.4.1 to 2.4.3
@@ -0,0 +0,0 @@ var InvalidXmlException = function (msg){ |
@@ -15,16 +15,18 @@ var getAllMatches = require("./util").getAllMatches; | ||
//var tagsRegx = new RegExp("<(\\/?[\\w:-]+)([^>]*)>([^<]+)?","g"); | ||
var tagsRegx = new RegExp("<(\\/?[\\w:-]+)([^>]*)>(<!\\[CDATA\\[(.*)\\]\\]>)?([^<]+)?","g"); | ||
var cdataRegx = "<!\\[CDATA\\[([^\\]\\]]*)\\]\\]>" | ||
var tagsRegx = new RegExp("<(\\/?[\\w:-]+)([^>]*)>(<!\\[CDATA\\[([^\\]\\]]*)\\]\\]>)*([^<]+)?","g"); | ||
var defaultOptions = { | ||
attrPrefix : "@_", | ||
textNodeName : "#text", | ||
ignoreNonTextNodeAttr : true, | ||
ignoreTextNodeAttr : true, | ||
ignoreNameSpace : false, | ||
ignoreRootElement : false | ||
}; | ||
attrPrefix : "@_", | ||
textNodeName : "#text", | ||
ignoreNonTextNodeAttr : true, | ||
ignoreTextNodeAttr : true, | ||
ignoreNameSpace : false, | ||
ignoreRootElement : false, | ||
textNodeConversion : true | ||
}; | ||
var buildOptions = function (options){ | ||
if(!options) options = {}; | ||
var props = ["attrPrefix","ignoreNonTextNodeAttr","ignoreTextNodeAttr","ignoreNameSpace","ignoreRootElement","textNodeName"]; | ||
var props = ["attrPrefix","ignoreNonTextNodeAttr","ignoreTextNodeAttr","ignoreNameSpace","ignoreRootElement","textNodeName","textNodeConversion"]; | ||
for (var i = 0; i < props.length; i++) { | ||
@@ -38,3 +40,3 @@ if(options[props[i]] === undefined){ | ||
var getTraversalObj =function (xmlData,options){ | ||
var getTraversalObj =function (xmlData,options){ | ||
options = buildOptions(options); | ||
@@ -50,3 +52,3 @@ //xmlData = xmlData.replace(/>(\s+)/g, ">");//Remove spaces and make it single line. | ||
attrsStr = tags[i][2], attrs, | ||
val = tags[i][4] === undefined ? tags[i][5] : simplifyCDATA(tags[i][4]); | ||
val = tags[i][4] === undefined ? tags[i][5] : simplifyCDATA(tags[i][0]); | ||
@@ -60,3 +62,3 @@ if(tag.indexOf("/") === 0){//ending tag | ||
var childNode = new xmlNode(tag,currentNode); | ||
if(selfClosingTag){ | ||
@@ -68,3 +70,3 @@ attrs = buildAttributesArr(attrsStr,options.ignoreTextNodeAttr,options.attrPrefix,options.ignoreNameSpace); | ||
attrs = buildAttributesArr(attrsStr,options.ignoreTextNodeAttr,options.attrPrefix,options.ignoreNameSpace); | ||
val = parseValue(val); | ||
val = parseValue(val,options.textNodeConversion); | ||
if(attrs){ | ||
@@ -96,4 +98,11 @@ attrs[options.textNodeName] = val; | ||
var cdRegx = new RegExp("<!\\[CDATA\\[([^\\]\\]]*)\\]\\]>","g"); | ||
function simplifyCDATA(cdata){ | ||
return cdata.replace(new RegExp("\\]\\]><\!\\[CDATA\\[", 'g'), ""); | ||
var result = getAllMatches(cdata,cdRegx); | ||
var val = ""; | ||
for (var i = 0; i < result.length ; i++) { | ||
val+=result[i][1]; | ||
} | ||
return val; | ||
} | ||
@@ -112,5 +121,5 @@ | ||
function parseValue(val){ | ||
function parseValue(val,conversion){ | ||
if(val){ | ||
if(isNaN(val)){ | ||
if(!conversion || isNaN(val)){ | ||
val = "" + val ; | ||
@@ -128,3 +137,3 @@ }else{ | ||
return val; | ||
} | ||
} | ||
@@ -131,0 +140,0 @@ var attrsRegx = new RegExp("(\\S+)=.([^'\"]+)","g"); |
@@ -0,0 +0,0 @@ var getAllMatches = function(string, regex) { |
@@ -0,0 +0,0 @@ var getAllMatches = require("./util").getAllMatches; |
@@ -0,0 +0,0 @@ #!/usr/bin/env node |
@@ -26,16 +26,18 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.parser = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
//var tagsRegx = new RegExp("<(\\/?[\\w:-]+)([^>]*)>([^<]+)?","g"); | ||
var tagsRegx = new RegExp("<(\\/?[\\w:-]+)([^>]*)>(<!\\[CDATA\\[(.*)\\]\\]>)?([^<]+)?","g"); | ||
var cdataRegx = "<!\\[CDATA\\[([^\\]\\]]*)\\]\\]>" | ||
var tagsRegx = new RegExp("<(\\/?[\\w:-]+)([^>]*)>(<!\\[CDATA\\[([^\\]\\]]*)\\]\\]>)*([^<]+)?","g"); | ||
var defaultOptions = { | ||
attrPrefix : "@_", | ||
textNodeName : "#text", | ||
ignoreNonTextNodeAttr : true, | ||
ignoreTextNodeAttr : true, | ||
ignoreNameSpace : false, | ||
ignoreRootElement : false | ||
}; | ||
attrPrefix : "@_", | ||
textNodeName : "#text", | ||
ignoreNonTextNodeAttr : true, | ||
ignoreTextNodeAttr : true, | ||
ignoreNameSpace : false, | ||
ignoreRootElement : false, | ||
textNodeConversion : true | ||
}; | ||
var buildOptions = function (options){ | ||
if(!options) options = {}; | ||
var props = ["attrPrefix","ignoreNonTextNodeAttr","ignoreTextNodeAttr","ignoreNameSpace","ignoreRootElement","textNodeName"]; | ||
var props = ["attrPrefix","ignoreNonTextNodeAttr","ignoreTextNodeAttr","ignoreNameSpace","ignoreRootElement","textNodeName","textNodeConversion"]; | ||
for (var i = 0; i < props.length; i++) { | ||
@@ -49,3 +51,3 @@ if(options[props[i]] === undefined){ | ||
var getTraversalObj =function (xmlData,options){ | ||
var getTraversalObj =function (xmlData,options){ | ||
options = buildOptions(options); | ||
@@ -61,3 +63,3 @@ //xmlData = xmlData.replace(/>(\s+)/g, ">");//Remove spaces and make it single line. | ||
attrsStr = tags[i][2], attrs, | ||
val = tags[i][4] === undefined ? tags[i][5] : simplifyCDATA(tags[i][4]); | ||
val = tags[i][4] === undefined ? tags[i][5] : simplifyCDATA(tags[i][0]); | ||
@@ -71,3 +73,3 @@ if(tag.indexOf("/") === 0){//ending tag | ||
var childNode = new xmlNode(tag,currentNode); | ||
if(selfClosingTag){ | ||
@@ -79,3 +81,3 @@ attrs = buildAttributesArr(attrsStr,options.ignoreTextNodeAttr,options.attrPrefix,options.ignoreNameSpace); | ||
attrs = buildAttributesArr(attrsStr,options.ignoreTextNodeAttr,options.attrPrefix,options.ignoreNameSpace); | ||
val = parseValue(val); | ||
val = parseValue(val,options.textNodeConversion); | ||
if(attrs){ | ||
@@ -107,4 +109,11 @@ attrs[options.textNodeName] = val; | ||
var cdRegx = new RegExp("<!\\[CDATA\\[([^\\]\\]]*)\\]\\]>","g"); | ||
function simplifyCDATA(cdata){ | ||
return cdata.replace(new RegExp("\\]\\]><\!\\[CDATA\\[", 'g'), ""); | ||
var result = getAllMatches(cdata,cdRegx); | ||
var val = ""; | ||
for (var i = 0; i < result.length ; i++) { | ||
val+=result[i][1]; | ||
} | ||
return val; | ||
} | ||
@@ -123,5 +132,5 @@ | ||
function parseValue(val){ | ||
function parseValue(val,conversion){ | ||
if(val){ | ||
if(isNaN(val)){ | ||
if(!conversion || isNaN(val)){ | ||
val = "" + val ; | ||
@@ -139,3 +148,3 @@ }else{ | ||
return val; | ||
} | ||
} | ||
@@ -142,0 +151,0 @@ var attrsRegx = new RegExp("(\\S+)=.([^'\"]+)","g"); |
{ | ||
"name": "fast-xml-parser", | ||
"version": "2.4.1", | ||
"version": "2.4.3", | ||
"description": "Validate XML or Parse XML to JS/JSON very fast without C/C++ based libraries", | ||
@@ -41,8 +41,11 @@ "main": "./bin/parser.js", | ||
"coveralls": "^2.11.15", | ||
"http-server": "^0.9.0", | ||
"http-server": "^0.10.0", | ||
"istanbul": "^0.4.5", | ||
"jasmine": "^2.5.3", | ||
"jasmine": "^2.6.0", | ||
"jasmine-core": "^2.5.2", | ||
"zombie": "^5.0.5" | ||
}, | ||
"dependencies": { | ||
"global": "^4.3.2" | ||
} | ||
} |
# [fast-xml-parser](https://www.npmjs.com/package/fast-xml-parser) | ||
Validae XML or Parse XML to JS/JSON very fast without C/C++ based libraries and no callback | ||
Validate XML or Parse XML to JS/JSON very fast without C/C++ based libraries and no callback | ||
You can use this library online (press try me button above), or as command from CLI, or in your website, or in npm repo. | ||
* This library let you validate the XML data syntatically. | ||
* This library let you validate the XML data syntactically. | ||
* Or you can transform/covert/parse XML data to JS/JSON object. | ||
@@ -30,8 +30,9 @@ * Or you can transform the XML in traversable JS object which can later be converted to JS/JSON object. | ||
var options = { | ||
attrPrefix : "@_", | ||
textNodeName : "#text", | ||
ignoreNonTextNodeAttr : true, | ||
ignoreTextNodeAttr : true, | ||
ignoreNameSpace : true | ||
}; | ||
attrPrefix : "@_", | ||
textNodeName : "#text", | ||
ignoreNonTextNodeAttr : true, | ||
ignoreTextNodeAttr : true, | ||
ignoreNameSpace : true, | ||
textNodeConversion : true | ||
}; | ||
if(fastXmlParser.validate(xmlData)=== true){//optional | ||
@@ -65,11 +66,11 @@ var jsonObj = fastXmlParser.parse(xmlData,options); | ||
Liraries that I compared | ||
Libraries that I compared | ||
* xml-mapping : fast, result is not satisfactory | ||
* xml2js : fast, result is not satisfactory | ||
* xml2js-expat : couldn't test performance as it gives error on high load. Instalation failed on traivs and on my local machine using 'yarn'. | ||
* xml2json : based on node-expat which is based on C/C++. Instalation failed on travis. | ||
* xml2js-expat : couldn't test performance as it gives error on high load. Installation failed on travis and on my local machine using 'yarn'. | ||
* xml2json : based on node-expat which is based on C/C++. Installation failed on travis. | ||
* fast-xml-parser : very very fast. | ||
Why not C/C++ based libraries? | ||
Instalation of such libraries fails on some OS. You may require to install missing dependency manually. | ||
Installation of such libraries fails on some OS. You may require to install missing dependency manually. | ||
@@ -93,3 +94,3 @@ **Benchmark report** | ||
- [stubmatic](https://github.com/NaturalIntelligence/Stubmatic) : A stub server to mock behaviour of HTTP(s) / REST / SOAP services. Stubbing redis is on the way. | ||
- [compare js](https://github.com/NaturalIntelligence/comparejs) : comparethe featues of JS code, libraries, and NPM repos. | ||
- [compare js](https://github.com/NaturalIntelligence/comparejs) : compare the features of JS code, libraries, and NPM repos. | ||
- [fast-lorem-ipsum](https://github.com/amitguptagwl/fast-lorem-ipsum) : Generate lorem ipsum words, sentences, paragraph very quickly. | ||
@@ -96,0 +97,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
689
99
93802
1
+ Addedglobal@^4.3.2
+ Addeddom-walk@0.1.2(transitive)
+ Addedglobal@4.4.0(transitive)
+ Addedmin-document@2.19.0(transitive)
+ Addedprocess@0.11.10(transitive)