XML 通过属性值 JavaScript 删除节点

Posted

技术标签:

【中文标题】XML 通过属性值 JavaScript 删除节点【英文标题】:XML deleting a node by attribute value JavaScript 【发布时间】:2014-11-03 16:41:16 【问题描述】:

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

【问题讨论】:

函数中的局部变量应该用var声明。 【参考方案1】:

您的 &lt;animal&gt; 节点不是 XML DOM 中***节点的子节点,因此 xmlDoc.removeChild() 将不起作用。

root[i].parentNode.removeChild(root[i]);

也就是说,由于从getElementsByTagName() 返回的节点列表是live,您可能会遇到困难。当你删除元素时,列表会缩小,你最终会跳过一些。您可以更改循环来处理:

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++;

【讨论】:

以上是关于XML 通过属性值 JavaScript 删除节点的主要内容,如果未能解决你的问题,请参考以下文章

通过保留第一次出现的节点来删除 XSLT 属性中的重复项

XML DOM – 属性和方法概述

XML DOM -属性和方法

JavaScript学习 - 基础 - DOM 节点 添加/删除/修改/属性值操作

根据属性值移除 XML 节点

通过选择值删除 XML dom 文档上的节点