JavaScript中的DOMParser不提供XML元素

时间:2018-11-17 23:39:03

标签: javascript xml domparser

我有这个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 :(得分:1)

对于空元素节点,您期望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。如果您将代码作为可运行的代码段发布,则很有用。