【问题标题】:Function RemoveChild(XmlNode node) failed in C#函数 RemoveChild(XmlNode 节点)在 C# 中失败
【发布时间】:2010-07-06 09:06:03
【问题描述】:

当我尝试使用 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。

【问题讨论】:

  • 似乎子节点在被选中时与其创建它的父实例“无关”。这对我来说似乎是一个错误。解决方法是(正如其他人所说):childNode.ParentNode.RemoveChild(childNode)

标签: c# xml c#-2.0 removechild selectsinglenode


【解决方案1】:

我相信 .RemoveChild 正在删除您选择的节点的子节点。

nodeName 下有没有孩子或者已经是叶子了?

编辑:

其实你需要把Parent的Child去掉,试试下面的方法:

nodeName.parentNode.removeChild(nodeName)

【讨论】:

    【解决方案2】:

    您试图直接从文档元素中删除一个节点,而它实际上是文档元素的曾孙(或者可能只是孙子)。 RemoveChild 仅在您指定 direct 子代时有效,而不仅仅是任何后代。

    试试这个:

    nodeName.ParentNode.RemoveChild(nodeName);
    

    (如果按照 Adkins 的回答存在 Remove(),那会更好 - 但我在 MSDN 中找不到这样的方法。)

    【讨论】:

    • 如果您使用的是 Linq to XML,它确实存在。我对我的答案进行了扩展以涵盖它。
    • 我读了另一本名为“Pro .NET 2.0 XML”的书。我按照示例代码表格编写了我的原始代码。但是示例 xml 文件并不像我的那样复杂。正如乔恩的回答。我的元素应该是文档元素的曾孙。 +1,谢谢。
    • @Adkins。我添加了类似if (node != null) { // do ...} 的保护
    【解决方案3】:

    您应该从直接父级中删除子级,而不是从顶部删除:

    nodeName.ParentNode.RemoveChild(nodeName); 
    

    【讨论】:

      【解决方案4】:

      而不是使用 .RemoveChild 尝试只使用 .Remove 这应该会给你你正在寻找的结果。

      编辑::

      请注意,这仅在您使用 Linq to XML 时有效。然后,您将使用 XNode 的一些变体,并且可以简单地说 blah.Remove,它应该可以解决问题。如果您不使用 Linq to XML,我建议您研究一下,因为它太棒了。

      【讨论】:

      • 没有基于我的 VS2005 & .NET 2.0 的 Remove() 方法。 :-)
      • @Nano:Linq 首先是 .NET 3.5(?),所以这可能是我的答案对你不起作用的原因。您是否有某些限制您使用 2.0 的要求?如果不是,则值得考虑升级。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 2016-12-23
      • 2018-12-01
      相关资源
      最近更新 更多