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】:
您的 <animal>
节点不是 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 删除节点的主要内容,如果未能解决你的问题,请参考以下文章