XPATH Получить дочерние элементы Typescript / Javascript - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть этот 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;

	}

Но это не работает, какие-либо предложения?

Спасибо

1 Ответ

0 голосов
/ 23 сентября 2018

Если я правильно понимаю, вы пытаетесь преобразовать сегменты 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);
<script src="https://cdnjs.cloudflare.com/ajax/libs/x2js/1.2.0/xml2json.js"></script>

PS: я обернул сегменты dl тегом <root>, чтобы сделать его действительным XML.Что-то, чтобы иметь в виду, или перебирать отдельные сегменты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...