我想删除具有用户指定的特定名称属性的节点。我究竟做错了什么?让我们的用户进入:" cat"每当系统发现具有属性cat的动物时,它就会将其删除。动物节点没有孩子。
这是.xml文件的简化
<animals>
<animal name="elephant"></animal>
<animal name="cat"></animal>
...
</animals>
这是我从xml文件中删除特定节点的代码。
function delete() {
xmlDoc = loadXMLDoc("file.xml");
root = xmlDoc.getElementsByTagName("animal");
for (i = 0; i < root.length; i++) {
if (root[i].nodeType == 1) {
if (root[i].attributes[0].value == document.getElementById("del").value) {
xmlDoc.removeChild(root[i]);
display(); // function displaying the results
}
}
}
}
答案 0 :(得分:2)
您的<animal>
节点不是XML DOM中顶级节点的子节点,因此xmlDoc.removeChild()
将不起作用。
root[i].parentNode.removeChild(root[i]);
也就是说,由于getElementsByTagName()
返回的节点列表实时,您可能会遇到困难。当你删除元素时,列表会缩小,你最终会跳过一些。您可以更改循环来处理:
for (var i=0; i<root.length; ) {
if(root[i].nodeType==1 && root[i].attributes[0].value==document.getElementById("del").value) {
xmlDoc.removeChild(root[i]);
display(); // function displaying the results
}
else
i++;
}