在javascript中遍历xml时出错

时间:2010-09-21 13:31:51

标签: javascript xml internet-explorer firefox

我使用下面的代码在javascript中遍历xml 我能够使用x [i] .childNodes [0] .text获得价值;在IE中的功能,但在Firefox中没有。 请告诉我应该使用什么,以便它适用于所有人。

  function loadXMLDoc(dname) {
    if (window.XMLHttpRequest) {
        xhttp = new XMLHttpRequest();
    }
    else {
        xhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhttp.open("GET", dname, false);
    xhttp.send();
    return xhttp.responseXML;
}
function loadxml() {
    var xmlDoc = loadXMLDoc("xmldata/wfc20100915.xml");


    // documentElement always represents the root node
    x = xmlDoc.documentElement.childNodes;
    var arr = new Array();
    var str = "";
    for (i = 0; i < x.length; i++) {
        if (x[i].childNodes.length > 3) {
            arr[i] = new Array(5);
            arr[i][0] = x[i].childNodes[0].text;
            arr[i][1] = x[i].childNodes[1].text;
            arr[i][2] = x[i].childNodes[2].text;
            arr[i][3] = x[i].childNodes[3].text;
            arr[i][4] = x[i].childNodes[4].text;

1 个答案:

答案 0 :(得分:1)

现代浏览器(Opera,Chrome,Firefox,Safari)和Internet Explorer以不同方式解释子节点。在代码中:

<div id="first">
    <div>bla</div>
</div>

http://jsfiddle.net/2Ra3B/

Internet Explorer只能看到1个“第一个”子节点。 现代浏览器将看到3个子节点:1个元素节点(div)和2个元素节点(白色空格)之前和之后的文本节点。如果您只想要文本节点,请检查nodeType == 3

此外,也许您应该使用datanodeValue代替text(我不知道text是否有效,在“经典”浏览器DOM中它不会不行,但我没有用responseXML检查。

如果您只想在JavaScript中使用传输数据,还应考虑使用JSON。

PS。您在代码中犯了错误:检查childNodes.length > 3而不是> 4或更好看>= 5