xmlHttpRequest nodeValue始终为null

时间:2016-07-27 07:43:44

标签: xml xmlhttprequest

我正在尝试读取一个简单的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

1 个答案:

答案 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