如何在JavaScript中循环遍历XML节点?

15

我试图遍历包含用户信息的XML节点,以创建一个HTML表格在我的网站上。

这是XML的样子:

<websites_name>
<user>...</user>
<user>...</user>
.
.
.
</websites_name>

这是我正在尝试解析的代码:

for(var user in xmlhttp.getElementsByTagName('user')){   //fix this row to me
    //Create a new row for tbody
    var tr = document.createElement('tr');
    document.getElementById('tbody').appendChild(tr);
}

更新

xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","some URL",true);
xmlhttp.send();
var xmlDoc = xmlhttp.responseXML;
var root = xmlDoc.getElementsByTagName('websites_name');
for(var i=0, i<root[0].childNodes.length,i++){
    //Create a new row for tbody
    var tr = document.createElement('tr');
    document.getElementById('tbody').appendChild(tr);
}
1个回答

21

在JavaScript中解析XML最不直观的事情之一是,元素标签内部的文本实际上是一个你必须遍历进入的节点。

假设它是<user>text data</user>,你不仅需要遍历到user元素的文本节点来提取文本数据,而且还要在DOM中创建一个包含该数据的文本节点才能看到它。参见nodeValuecreatetextnode

// get XML 
var xml = xhr.responseXML;

// get users
var users = xml.getElementsByTagName("user");
for (var i = 0; i < users.length; i++) {   
    var user = users[i].firstChild.nodeValue;
    var tr = document.createElement("tr");
    var td = document.createElement("td");
    var textNode = document.createTextNode(user);
    td.appendChild(textNode);        
    tr.appendChild(td);        
    document.getElementById("tbody").appendChild(tr);
}   

我已经找到问题所在,它位于“var root = xmlDoc.getElementsByTagName("websites_name");”这一行。我做错了什么?看看我的更新。你的解决方案是相同的,除了textNode之外。实际上,在用户下面有更多的XML节点。 - einstein
好的,我知道问题出在哪里了。这只是一个非常小的问题。生成我的 XML 文件的脚本中,我忘记添加 "header("Content-type: text/xml");" 这一行了。 - einstein
1
太棒了 - 是的,使用ajax时,内容类型这种东西非常重要。使用像jQuery这样的库使得这些事情变得更加容易... - Myer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接