Доступ к различным узлам с одинаковым именем - PullRequest
0 голосов
/ 08 марта 2020

У меня есть ситуация, когда у меня есть файл xml, который имеет разные уровни дочерних узлов, называемых одним и тем же. Вот пример:

<listing>
<post_town>London</post_town>
<price>940000</price>
<longitude> 51.2</longitude>
<latitude>20.000</latitude>
<price_change>
    <date>2020-01-30 08:43:36</date>
    <direction/>
    <percent>0%</percent>
    <price>975000</price>
</price_change>
<price_change>
    <date>2020-02-20 15:59:01</date>
    <direction>down</direction>
    <percent>-3.5%</percent>
    <price>940000</price>
</price_change>
<price_change_summary>
<direction>down</direction>
<percent>-3.5%</percent>
</listing>

У меня есть скрипт, который не работает, я хочу, чтобы он игнорировал дочерние узлы "price" в элементах xml. Этот скрипт выглядит следующим образом: «

<html>
<body>

<p id="demo"></p>

<script>
var xhttp;
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
    myFunction(this);
    }
};
xhttp.open("GET", "http://test.co.uk/xmltest.xml", true);
xhttp.send();

function myFunction(xml) {
var x, y, z, i, txt, xmlDoc; 
xmlDoc = xml.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName("latitude");
y = xmlDoc.getElementsByTagName("longitude");
z = xmlDoc.getElementsByTagName("price");


for (i = 0; i < x.length; i++) { 
    txt += "{location:" + x[i].childNodes[0].nodeValue + ", " + y[i].childNodes[0].nodeValue +", weight:" + z[i].childNodes[0].nodeValue + "},<br>";
}
document.getElementById("demo").innerHTML = txt;
 }
</script>
</body>
</html>

В качестве примера из вышеприведенного должно быть« {location: 51.2, 20.000, weight: 940000},
»- игнорирование элементов в элементе и цикл для множества различных списков, чтобы вытащить ту же информацию, что и выше.

Конечная цель состоит в том, чтобы просеять это xml и распечатать широту, долготу и первоначальную цену для каждого списка, и я не могу показаться чтобы увидеть, что я делаю не так?

1 Ответ

1 голос
/ 08 марта 2020

Предоставленное XML искажено. <price_change_summary> не имеет закрывающего тега. Так что это не действительно XML. Как только вы поместите закрывающие теги на этот элемент, он будет работать правильно.

РЕДАКТИРОВАТЬ после комментариев:

Измените ваши селекторы на y и z, чтобы вы выбирали братьев и сестер для каждого x. Сделайте это в l oop таким образом:

for (i = 0; i < x.length; i++) {
   const long = x[i].parentNode.querySelector('longitude');
   const price = x[i].parentNode.querySelector('price');
        txt += "{location:" + x[i].childNodes[0].nodeValue + ", " + long.childNodes[0].nodeValue +", weight:" + price.childNodes[0].nodeValue + "},<br>";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...