我正在尝试读取一个简单的XML文件,但一方面总是使用nodeValue获取null,另一方面注意到子节点上有一些奇怪的行为。
首先是奇怪的行为: 这是我的xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<productList>
<product>
<productname>Keilspanner</productname>
<artikelnummer>m12.123</artikelnummer>
<productid>2001</productid>
<objname>keilspanner</objname>
<length>6</length>
<width>5</width>
<height>2.5</height>
</product>
<product>
<productname>feste Backe</productname>
<artikelnummer>m12.456</artikelnummer>
<productid>3001</productid>
<objname>festeBacke</objname>
<length>6</length>
<width>4.4</width>
<height>2.5</height>
</product>
<product>
<productname>ClampRail</productname>
<artikelnummer>123</artikelnummer>
<productid>1001</productid>
<objname>clampRail</objname>
<length>40</length>
<width>5</width>
<height>5</height>
</product>
<product/>
</productList>
当我打印出“产品”的所有子节点时:
for(i=0; i<=14; i++){
console.log(xmlDoc.getElementsByTagName("product")[0].childNodes[i]);
};
我明白了:
loadXML.js:22 #text
loadXML.js:22 <productname>Keilspanner</productname>
loadXML.js:22 #text
loadXML.js:22 <artikelnummer>m12.123</artikelnummer>
loadXML.js:22 #text
loadXML.js:22 <productid>2001</productid>
loadXML.js:22 #text
loadXML.js:22 <objname>keilspanner</objname>
loadXML.js:22 #text
loadXML.js:22 <length>6</length>
loadXML.js:22 #text
loadXML.js:22 <width>5</width>
loadXML.js:22 #text
loadXML.js:22 <height>2.5</height>
loadXML.js:22 #text
每隔一个值实际上是我的xml文件的子代。
第二期:当我打电话时:
xmlDoc.getElementsByTagName("product")[0].childNodes[1].nodeValue;
它总是返回null。
这是我完整的js:
function readXml() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
myFunction(xhttp);
}
};
xhttp.open("GET", "xml/products.xml", true);
xhttp.send();
}
function myFunction(xml) {
var xmlDoc = xml.responseXML;
for(i=0; i<=14; i++){
console.log(xmlDoc.getElementsByTagName("product")[0].childNodes[i]);
};
console.log(xmlDoc.getElementsByTagName("product")[0].childNodes[1].nodeValue);
}
希望你能帮助我,我是xml的新手,我在开始时就失败了:D
答案 0 :(得分:1)
每隔一个值实际上是我的xml文件的子代。
每个值都是第一个产品元素的子节点。
每隔一个值是一个子元素节点。其他是文本节点。
元素之间有空格。白色空间是文本。文本创建节点。
当我打电话时:
xmlDoc.getElementsByTagName("product")[0].childNodes[1].nodeValue;
它总是返回null。
这是可以预料的。 xmlDoc.getElementsByTagName("product")[0].childNodes[1]
是<productname>Keilspanner</productname>
,它是一个元素节点。
node value of an element is always null
。
如果你想要里面的文字,你必须达到文本节点的值。
xmlDoc.getElementsByTagName("product")[0].childNodes[1].firstChild.nodeValue