Javascript forEach не работает при циклическом просмотре XML, обработанного в формате JSON, с 1 дочерним узлом?

#javascript #json #xml

#javascript #json #xml

Вопрос:

У меня есть XML-файл со следующей структурой:

 <output>
  <count>
  </count>
  <rows>
    <row>
      <element1></element1>
      <element2></element2>
      <element3></element3>
      <element4></element4>
    </row>
    <row>
      <element1></element1>
      <element2></element2>
      <element3></element3>
      <element4></element4>
    </row>
  </rows>
</output>
  

Я запрашиваю файл через AJAX из PHP и загружаю его (ответ) в переменную:

 var xml=JSON.parse(response);
  

Далее я хочу выполнить цикл, чтобы получить данные. Я заметил, что, когда количество узлов строки> 1, я могу сделать, например:

 var list=[];
xml.output.list.rows.row.forEach(function(item)
{
   list.push(item.element1);
});
  

Однако, когда имеется только 1 узел строки, этот forEach не работает. Может кто-нибудь объяснить мне, почему и / или предоставить альтернативное решение / подход для итерации по такому файлу?

Комментарии:

1. XML не является JSON?

2. вы должны показывать JSON, а не xml

3. Я не знаю тип объекта строки, как я могу проверить? Я создаю div из данных в узлах элементов (которые также могут иметь дочерние узлы). Мое решение на данный момент — проверить, сколько существует дочерних элементов строки; если только 1, я просто беру его напрямую, если больше 1, я перебираю их через forEach. Это работает, но, на мой взгляд, не очень эффективно.

4. @ILE Вы, вероятно, хотите включить образец XML, в котором есть только одна строка. Далее, мы должны предположить, что здесь происходит некоторое преобразование XML -> JSON, и оно может быть настроено на преобразование массивов с одним элементом, подобным этому

Ответ №1:

Теперь проверка количества дочерних узлов с помощью

 for (childnode in xml.output.rows.row)
  

что позволяет мне получать доступ к данным каждого дочернего узла независимо от количества узлов.

Ответ №2:

Вместо того, чтобы анализировать XML в формате JSON, я рекомендую вам проанализировать его в документе. Ниже приведен пример кода

 var testXML = "<output><count></count><rows><row><element1>asd</element1></row><row><element1>zz</element1><element2>xx</element2></row></rows></output>";

var parser = new DOMParser();
var doc = parser.parseFromString(testXML, "text/xml");
var rows = doc.getElementsByTagName('row');

for(var i = 0; i < rows.length; i  ) {

    console.log(rows[0]);
};
  

Он выводит 2 строки внутри выбранных строк. Пожалуйста, дайте мне знать, если вам нужно дополнительное объяснение.

Комментарии:

1. Спасибо за предложение, но изменение метода синтаксического анализа на самом деле не вариант, учитывая достигнутый прогресс..