#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. Спасибо за предложение, но изменение метода синтаксического анализа на самом деле не вариант, учитывая достигнутый прогресс..