3

RemoveChild() を使用して子要素の一部を削除しようとすると、しかし、例外をスローします。以下にコードを添付しました。

    nodeName = doc.SelectSingleNode("//Equipment//DataCollections//EnabledIDs//MyID[@id='" + attrValue + "']"); 
   // Found the nodeName successfully druing run time.
    doc.DocumentElement.RemoveChild(nodeName); 
   // faild to Remove the node

以下にエラーを表示:

An unhandled exception of type 'System.ArgumentException' occurred in System.Xml.dll

Additional information: The node to be removed is not a child of this node. 

ノードを削除するにはどうすればよいですか?

[アップデート]

VS2005 & .NET 2.0 を使用。

4

4 に答える 4

8

.RemoveChild は、選択したノードの子を削除していると思います。

下に子nodeNameはいますか、それともすでにリーフですか?

編集:

実際には、親の子を削除する必要があります。次のことを試してください。

nodeName.parentNode.removeChild(nodeName)
于 2010-07-06T09:11:45.617 に答える
5

ドキュメント要素からノードを直接削除しようとしていますが、それは実際にはドキュメント要素のひ孫 (または単なる孫) です。子孫だけでなく、直接RemoveChildの子を指定した場合にのみ機能します。

これを試して:

nodeName.ParentNode.RemoveChild(nodeName);

(Remove()アドキンスの回答に従って存在する場合、それはより良いでしょう-しかし、MSDN でそのような方法を見つけることができません。)

于 2010-07-06T09:14:26.090 に答える
3

上からではなく、直接の親から子を削除する必要があります。

nodeName.ParentNode.RemoveChild(nodeName); 
于 2010-07-06T09:15:59.507 に答える
1

.RemoveChild を使用する代わりに、単に .Remove を使用してみてください。これにより、探している結果が得られるはずです。

編集::

これは、Linq to XML を使用している場合にのみ機能することに注意してください。次に、XNode のいくつかのバリエーションで作業し、単純に blah.Remove と言うだけでうまくいくはずです。Linq to XML を使用していない場合は、その原因を調べることをお勧めします。

于 2010-07-06T09:13:29.137 に答える