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()按照 Adkins 的回答存在,那会更好——但我在 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 回答