У меня есть XML-файл, который выглядит так:
<ROWSET>
<ROW>
<option1> lala </option1>
...
<option39> lolo </option39>
</ROW>
<ROW>
<option1> baba </option1>
...
<option39> bobo </option39>
</ROW>
...
</ROWSET>
Всего файл содержит 840 строк. Теперь у меня есть некоторый код javascript, который получает имена узлов ("option1", "option2",..., "option39") и печатает их через console.info.
Вот как выглядит код:
var xmlDoc = xml.responseXML;
var reihen = xmlDoc.getElementsByTagName("ROW");
for (var i = 0; i < 1; i++) {
for (var j = 0; j < (eigenschaften * 2); j++) {
var reihe = reihen[i].childNodes[j];
if (reihe.nodeType === 1)
console.info(reihe.nodeName + j + " " + i);
}
}
eigenschaften = 39 (количество узлов на ROW).
К сожалению, это не останавливается после того, как я дал мне 39 имен узлов; это просто продолжается до тех пор, пока мой браузер не выйдет из строя. Как закончить цикл? По какой-то причине он не останавливается после i > 1, он просто продолжается с i = 0.
Итак, после того, как он дал мне «option39», он сразу же начинает с «option1».
Спасибо за вашу помощь :)
Если я этого не сделаю, по какой-то причине он получит только половину вариантов.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Похоже, в коде есть что-то еще, чего мы не видим, что вызывает проблему. Но мне кажется, что вы должны просто ссылаться на длины и использовать их в циклах вместо переменных с числами.
var xmlStr = `<?xml version = "1.0"?>
<ROWSET>
<ROW>
<option1> lala1 </option1>
<option2> lala2 </option2>
<option3> lala3 </option3>
<option4> lala4 </option4>
<option5> lala5 </option5>
<option39> lolo </option39>
</ROW>
<ROW>
<option1> baba1 </option1>
<option2> baba2 </option2>
<option3> baba3 </option3>
<option4> baba4 </option4>
<option5> baba5 </option5>
<option39> bobo </option39>
</ROW>
</ROWSET>`
var xmlDoc = new window.DOMParser().parseFromString(xmlStr, "text/xml")
//var xmlDoc = xml.responseXML;
var reihen = xmlDoc.getElementsByTagName("ROW");
for (var i = 0; i < reihen.length; i++) {
var rowChildren = reihen[i].childNodes
for (var j = 0; j < rowChildren.length; j++) {
var reihe = rowChildren[j];
if (reihe.nodeType === 1)
console.info(reihe.nodeName + ' ' + j + " " + i);
}
}просто читаю первую строку
var xmlStr = `<?xml version = "1.0"?>
<ROWSET>
<ROW>
<option1> lala1 </option1>
<option2> lala2 </option2>
<option3> lala3 </option3>
<option4> lala4 </option4>
<option5> lala5 </option5>
<option39> lolo </option39>
</ROW>
<ROW>
<option1> baba1 </option1>
<option2> baba2 </option2>
<option3> baba3 </option3>
<option4> baba4 </option4>
<option5> baba5 </option5>
<option39> bobo </option39>
</ROW>
</ROWSET>`
var xmlDoc = new window.DOMParser().parseFromString(xmlStr, "text/xml")
//var xmlDoc = xml.responseXML;
var reihen = xmlDoc.getElementsByTagName("ROW");
var rowChildren = reihen[0].childNodes
for (var j = 0; j < rowChildren.length; j++) {
var reihe = rowChildren[j];
if (reihe.nodeType === 1)
console.info(reihe.nodeName + ' ' + j);
}Спасибо! Таким образом, с вашей модификацией он по-прежнему дает все параметры так часто, как существуют строки. Как я могу получить каждый вариант только один раз?
Вам просто нужны имена опций? Думал, вы пытаетесь перебрать все строки.... Чем просто ссылаться на первую строку....
это то, что я пытался сделать с первым циклом for, но это не сработало...
По какой-то причине это не работает... может это как-то связано с тем, что я использую var xmlDoc = xml.responseXML вместо var xmlDoc = new window.DOMParser().parseFromString(xmlStr, "text/xml")?
Хорошо. Но все же я не могу заставить его остановиться после первого ряда ... Теперь я должен, но это не так.
Он дает мне первую строку, затем говорит TypeError: xml is undefined и начинает снова
хорошо. Я переместил его в другое место в своем коде, и теперь он работает. Теперь мне просто нужно придумать, как вернуть его обратно, чтобы он снова не рухнул... Большое спасибо, чувак! :)
почему ты умножаешь на 2?