我使用下面的代码在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;
答案 0 :(得分:1)
现代浏览器(Opera,Chrome,Firefox,Safari)和Internet Explorer以不同方式解释子节点。在代码中:
<div id="first">
<div>bla</div>
</div>
Internet Explorer只能看到1个“第一个”子节点。
现代浏览器将看到3个子节点:1个元素节点(div)和2个元素节点(白色空格)之前和之后的文本节点。如果您只想要文本节点,请检查nodeType == 3
。
此外,也许您应该使用data
或nodeValue
代替text
(我不知道text
是否有效,在“经典”浏览器DOM中它不会不行,但我没有用responseXML
检查。
如果您只想在JavaScript中使用传输数据,还应考虑使用JSON。
PS。您在代码中犯了错误:检查childNodes.length > 3
而不是> 4
或更好看>= 5
。