删除特定的xml节点Javascript

时间:2013-07-12 14:26:24

标签: javascript xml node.js

我的xml文件如下:

它包含不同的“对象”节点,在不同的对象中有不同的参数,一个是删除参数。

我想删除包含已删除参数1的所有“对象”节点。

这是删除具有参数节点deleted = 1的节点对象的代码:

x=xmlDoc.documentElement;
for(var count=0; count<5;count++){
  var y=x.getElementsByTagName("deleted")[count]; //Find that nodes arent
  if(y.textContent == "1") {
    var z=y.parentNode; //delete the node from the parent.
    x.removeChild(z);
    Xml2String1= new XMLSerializer().serializeToString(x);
  }
}

1 个答案:

答案 0 :(得分:0)

你的循环不正确:

for(var x1=0; x1<5;x1++){
  var y=x.getElementsByTagName("deleted")[x1];

您的循环运行5次迭代,而不考虑找到<deleted>个元素的数量。每次循环时,您再次搜索并获得剩余<deleted>元素的新NodeList/HTMLCollection,但无论如何,循环计数器都会递增。

请改为尝试:

var deletedNodesList = x.getElementsByTagName("deleted");
var nodesToDelete = [];
for (var index = 0; index < deletedNodes.length ; index += 1)
    {
    var node = deletedNodes[index];
    if (node.textContent == "1")
        {
        nodesToDelete.push( node.parentNode ); //delete the node from the parent
        }
    }

nodesToDelete.forEach( function() { x.removeChild(this); } );

请注意,根据MDN上的文档,NodeList是 live 集合,因此在处理它时不要修改它。

<小时/> PS。 我的第二个raam86建议使用理智的(有意义的)变量名。有意义的变量名称使代码更容易理解,这使得编写正确的代码和解决错误代码中的问题变得更加容易。