0

私のxmlファイルは次のようなものです:

さまざまな「オブジェクト」ノードが含まれており、さまざまなオブジェクトにはさまざまなパラメーターがあり、1つは削除されたパラメーターです。

削除されたパラメータ 1 を含むすべての「オブジェクト」ノードを削除したいと考えています。

これは、パラメーター node 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);
  }
}
4

1 に答える 1

0

あなたのループは正しくありません:

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

<deleted>検出された要素の数に関係なく、ループが 5 回繰り返されます。ループを通過するたびに、再度検索して残りの要素の新しいNodeList/HTMLCollection<deleted>を取得しますが、ループ カウンターは関係なくインクリメントされます。

代わりにこれを試してください:

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 はライブコレクションであるため、処理中に変更しないでください。


PS。私は raam86 の推奨する、健全な (意味のある) 変数名を使用することに同意します。意味のある変数名を使用すると、コードが理解しやすくなり、正しいコードを記述しやすくなり、正しくないコードの問題を解決しやすくなります。

于 2013-07-12T19:30:06.417 に答える