Javascript, получающий цикл имен узлов XML, не останавливается

У меня есть 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».

Спасибо за вашу помощь :)

почему ты умножаешь на 2?

epascarello 06.03.2019 16:31

Если я этого не сделаю, по какой-то причине он получит только половину вариантов.

E Lon Mask 06.03.2019 16:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, в коде есть что-то еще, чего мы не видим, что вызывает проблему. Но мне кажется, что вы должны просто ссылаться на длины и использовать их в циклах вместо переменных с числами.

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);
}

Спасибо! Таким образом, с вашей модификацией он по-прежнему дает все параметры так часто, как существуют строки. Как я могу получить каждый вариант только один раз?

E Lon Mask 06.03.2019 16:47

Вам просто нужны имена опций? Думал, вы пытаетесь перебрать все строки.... Чем просто ссылаться на первую строку....

epascarello 06.03.2019 16:50

это то, что я пытался сделать с первым циклом for, но это не сработало...

E Lon Mask 06.03.2019 16:53

По какой-то причине это не работает... может это как-то связано с тем, что я использую var xmlDoc = xml.responseXML вместо var xmlDoc = new window.DOMParser().parseFromString(xmlStr, "text/xml")?

E Lon Mask 06.03.2019 17:03

Хорошо. Но все же я не могу заставить его остановиться после первого ряда ... Теперь я должен, но это не так.

E Lon Mask 06.03.2019 17:12

Он дает мне первую строку, затем говорит TypeError: xml is undefined и начинает снова

E Lon Mask 06.03.2019 17:14

хорошо. Я переместил его в другое место в своем коде, и теперь он работает. Теперь мне просто нужно придумать, как вернуть его обратно, чтобы он снова не рухнул... Большое спасибо, чувак! :)

E Lon Mask 06.03.2019 17:20

Другие вопросы по теме