XML按属性值JavaScript删除节点

时间:2014-11-03 16:41:16

标签: javascript xml html5 removechild xmlnode

我想删除具有用户指定的特定名称属性的节点。我究竟做错了什么?让我们的用户进入:" 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
            }
        }
    }
}

1 个答案:

答案 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++;
}