Xml Dom解析返回null

时间:2016-11-25 07:25:25

标签: javascript xml

我是html和javascript的新手。我一直在尝试通过javascript代码解析和访问xml文件的数据。目前它显示为null。我在下面发布我的代码。请看看并帮忙。

    Html code:

        <!DOCTYPE html>
    <html>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <body>

    <p id="demo"></p>

    <script>
    var xhttp;
    xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            myFunction(this);
        }
    };
    xhttp.open("GET", "http://10.21.64.222/LoadBreakSwitch/LBS_Commands.xml", true);
    xhttp.send();

    function myFunction(xml) {
        var x, i, txt, xmlDoc; 
        xmlDoc = xml.responseXML;
        txt = "";
        x = xmlDoc.getElementsByTagName("Ping");
        for (i = 0; i < x.length; i++) { 
            txt += x[i].childNodes[0].nodeValue + "<br>";
        }
        document.getElementById("demo").innerHTML = txt;
    }
    </script>
    </body>
    </html>

The xml file:

    <?xml version="1.0" encoding="utf-8"?>

<LBSCommands>
  <Ping Commkey="A3070000AA00A4" Value="A309008001043101A4"/>
  <Frequency Commkey="A3070300AD00A4" CommValue="A309038001013101A4"/>
  <SwitchStatus Commkey="A3071D01C800A4" CommValue="A3091D8101014C01A4"/>

</LBSCommands>

1 个答案:

答案 0 :(得分:0)

我不确定你到底是什么意思&#34;它显示为空&#34;,但是将代码更改为使用onload回调可能会有所帮助:

var xhttp;
xhttp = new XMLHttpRequest();
xhttp.onload = function() {
    myFunction(this);
};

另外,这一行:txt += x[i].childNodes[0].nodeValue + "<br>";会在XML文档中childNodes[0]undefined时引发异常。

修改

要使x[i].childNodes[0]为非null,必须将所需属性移动为子元素的文本值。例如,如果您替换:

<Ping Commkey="A3070000AA00A4" Value="A309008001043101A4"/>

使用:

<Ping>
    <Commkey key="A3070000AA00A4">
        A309008001043101A4
    <Commkey/>
<Ping/>

(并对其他元素做同样的事情)然后你会有类似的事情:

 <p id="demo">
      A309008001043101A4<br>
      A309038001013101A4<br>
      A3091D8101014C01A4<br>
 </p>

作为您的HTML。

如果这不是您想要的确切HTML结果,请展示示例HTML,以便我能够提供帮助。