【问题标题】:XPATH Get child elements Typescript/JavascriptXPATH 获取子元素 Typescript/Javascript
【发布时间】:2018-09-23 11:03:15
【问题描述】:

我有这个 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>

我需要将 Dl 存储在一个包含 dl 的所有子值的数组中。 我的输出应该是:

dl: {
  number: 1,
  ref: r54
},
dl {
  number: 1,
  ref: r67
},
dl {
  number: 1,
  ref: r89
},

我正在尝试做这样的事情:

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;

	}

但它不起作用,有什么建议吗?

谢谢

【问题讨论】:

  • 你为 xpath 使用了什么值?这些信息将使我们能够尝试运行您的代码。
  • 你可以用DOMParser代替xpath
  • 这是您要找的吗?

标签: javascript xml angular xpath


【解决方案1】:

如果我理解正确,您正在尝试将 XML 段转换为 JSON。

有许多可用的 XML 到 JSON 库。

利用它们,例如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);
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/x2js/1.2.0/xml2json.js"&gt;&lt;/script&gt;

PS:我用&lt;root&gt; 标记包装了 dl 段以使其成为有效的 XML。需要牢记的东西,或迭代各个细分市场。

【讨论】:

  • 为了速度和自定义选项,我想在上面的列表中添加fast-xml-parser
猜你喜欢
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 2011-08-03
  • 2017-05-07
  • 1970-01-01
相关资源
最近更新 更多