-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparser.js
69 lines (62 loc) · 1.94 KB
/
parser.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
function parseXml(xmlObj, arrayTags) {
// var dom = null;
// if (window.DOMParser) {
// dom = (new DOMParser()).parseFromString(xml, "text/xml");
// }
// else if (window.ActiveXObject)
// {
// dom = new ActiveXObject('Microsoft.XMLDOM');
// dom.async = false;
// if (!dom.loadXML(xml))
// {
// throw dom.parseError.reason + " " + dom.parseError.srcText;
// }
// }
// else {throw "cannot parse xml string!";}
function isArray(o) {
return Object.prototype.toString.apply(o) === '[object Array]';
}
function parseNode(xmlNode, result) {
if (xmlNode.nodeName == "#text") {
var v = xmlNode.nodeValue;
if (v.trim()) {
result['#text'] = v;
}
return;
}
var jsonNode = {};
var existing = result[xmlNode.nodeName];
if (existing) {
if(!isArray(existing)) {
result[xmlNode.nodeName] = [existing, jsonNode];
}
else {result[xmlNode.nodeName].push(jsonNode);}
}
else
{
if(arrayTags && arrayTags.indexOf(xmlNode.nodeName) != -1) {
result[xmlNode.nodeName] = [jsonNode];
}
else {
result[xmlNode.nodeName] = jsonNode;
}
}
if(xmlNode.attributes) {
var length = xmlNode.attributes.length;
for(var i = 0; i < length; i++) {
var attribute = xmlNode.attributes[i];
jsonNode[attribute.nodeName] = attribute.nodeValue;
}
}
var length = xmlNode.childNodes.length;
for(var i = 0; i < length; i++) {
parseNode(xmlNode.childNodes[i], jsonNode);
}
}
var result = {};
if(xmlObj.childNodes.length) {
parseNode(xmlObj.childNodes[0], result);
}
return result;
}
module.exports = parseXml;