我有这个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中获取所有数据,但是以这种方式我无法获取它。
我做错了什么?
答案 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。如果您将代码作为可运行的代码段发布,则很有用。