代码之家  ›  专栏  ›  技术社区  ›  Dr. Rajesh Rolen

在JavaScript中遍历XML时出错

  •  0
  • Dr. Rajesh Rolen  · 技术社区  · 15 年前

    我使用下面的代码在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 回复  |  直到 15 年前
        1
  •  1
  •   pepkin88    15 年前

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

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

    ( http://jsfiddle.net/2Ra3B/ )

    Internet Explorer将只看到“First”的一个子节点。 现代浏览器将看到3个子节点:1个元素节点(DIV)和2个文本节点(在元素节点之前和之后)(空白)。检查 nodeType == 3 如果只需要文本节点。

    而且,也许你应该使用 data nodeValue 而不是 text (我不知道 文本 甚至可以,在“经典”浏览器DOM中,它也不起作用,但我没有检查它 responseXML )

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

    你在密码上犯了错误:检查 childNodes.length > 3 而不是 > 4 或者看起来更好 >= 5 .

    推荐文章