问题
I have this XML:
<dl>
<number>1</number>
<ref>r54</ref>
</dl>
<dl>
<number>2</number>
<ref>r67</ref>
</dl>
<dl>
<number>3</number>
<ref>r89</ref>
</dl>
I need to store Dl in an array which contains all the child values of the dl. My output should be:
dl: {
number: 1,
ref: r54
},
dl {
number: 1,
ref: r67
},
dl {
number: 1,
ref: r89
},
I'm trying to do something like this:
public getArrayDl(xml: Document, xpath: string) {
let array = [];
let i = 0;
let nodes = xml.evaluate(xpath, xml, null, XPathResult.ANY_TYPE, null);
let result = nodes.iterateNext();
while (result) {
array[i] = result.childNodes[0].nodeValue;
result = nodes.iterateNext();
i++;
}
return array;
}
But it is isn't working, any suggestions?
Thanks
回答1:
If I understand this correctly, you are trying to convert XML segments to JSON.
There are a number of XML to JSON libraries available.
- xml-js
- xml2json
- x2js
- or, if you insist, role your own..
Make use of them, e.g. x2js
var xmlString = `<root><dl><number>1</number><ref>r54</ref></dl><dl><number>2</number><ref>r67</ref></dl><dl><number>3</number><ref>r89</ref></dl></root>`;
var x2js = new X2JS();
//console.log(x2js.xml_str2json(xmlString));
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "text/xml");
var arr = [];
let nodes = xmlDoc.evaluate("//*[dl]", xmlDoc, null, XPathResult.ANY_TYPE, null);
let result = nodes.iterateNext();
while (result) {
arr.push(x2js.xml2json (result));
result = nodes.iterateNext();
}
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/x2js/1.2.0/xml2json.js"></script>
PS: I wrapped the dl segments with a <root> tag to make it valid XML. Something to keep in mind, or iterate over the individual segments.
来源:https://stackoverflow.com/questions/52465472/xpath-get-child-elements-typescript-javascript