DOMParser в JavaScript не предоставляет элементы XML - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть этот XML:

<Walls>                        <!-- Added by edit -->
  <Wall Height="1.0">
     <Corner X="15" Y="9"/>
     <Corner X="23.5" Y="9"/>
     <Corner X="23.5" Y="8.5"/>
     <Corner X="15" Y="8.5"/>
  </Wall>
  <Wall Height="3.0">
     <Corner X="14" Y="5.5"/>
     <Corner X="24" Y="5.5"/>
     <Corner X="24" Y="5"/>
     <Corner X="14" Y="5"/>
  </Wall> 
</Walls>                       <!-- Added by edit -->

И я сделал парсер для этого на JavaScript:

if (window.DOMParser){
     var parser = new DOMParser();
     var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
     var xmlDoc = parser.parseFromString(txt, "application/xml");
}         
document.getElementById("Wall").innerHTML= xmlDoc.getElementsByTagName("Wall")[0].childNodes[1].nodeValue;

Теперь я хочу получить все данные из XML, но втаким образом я не могу получить это.
Что я сделал не так?

1 Ответ

0 голосов
/ 18 ноября 2018

Что вы ожидаете от nodeValue для пустого элемента элемента?Свойство nodeValue предназначено для узлов текста, комментариев и CDATA. Возможно, вы хотите прочитать значения атрибута?

Чтобы прочитать значения атрибута, используйте getAttribute ,например,

var xml = '<Wall Height="1.0">' +
            '<Corner X="15" Y="9"/>' +
            '<Corner X="23.5" Y="9"/>' +
            '<Corner X="23.5" Y="8.5"/>' +
            '<Corner X="15" Y="8.5"/>' +
          '</Wall>';

if (window.DOMParser){
  var parser = new DOMParser();
  var xmlDoc = parser.parseFromString(xml, "application/xml");
}

if (xmlDoc) {
  var nodes = xmlDoc.querySelectorAll('Corner');
  var wall = document.querySelector('#Wall');
  var html = Array.from(nodes).map((node, i) =>
    `${node.tagName} ${i}: X=${node.getAttribute('X')}, Y=${node.getAttribute('Y')}`
  );
  wall.innerHTML = html.join('<br>');
}
<div id="Wall"></div>

PS.Это очень помогает, если вы публикуете свой код как исполняемый фрагмент.

...