2010-09-21 41 views
0

我正在使用下面的代碼來遍歷javascript中的xml 我能夠使用x [i] .childNodes [0] .text;功能在IE瀏覽器,但不是在Firefox。 請告訴我,我應該使用什麼,以便它與所有工作。在javascript中遍歷xml時出錯

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

現代瀏覽器(歌劇,鉻,火狐,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