如何使用 C# 从 XML 节点列表中删除节点

Posted

技术标签:

【中文标题】如何使用 C# 从 XML 节点列表中删除节点【英文标题】:How to remove a Node from XML Node List using C# 【发布时间】:2013-01-08 04:36:55 【问题描述】:

我有一个 XmlNodeList xnlSubParam

              XmlDocument xDoc = new XmlDocument();
              xDoc.Load(somexml);
              XmlNode xnParamList = xDoc.SelectSingleNode("//tag");
              XmlNodeList   xnlSubParam = xnParamList.SelectNodes("subparam");

现在 xnlSubParam 将包含一个节点列表

如何获取节点属性以及如何从列表中删除节点。我只是想从 xnlSubparam 中删除子参数列表。如何执行此操作? 在我的 xml 中,我有一个内部命名的元素

              <subparam name="test1" displayname="Test1" type="BOOLEAN"/> 
              <subparam name="test2" displayname="Test2" type="BOOLEAN"/>
              <subparam name="test3" displayname="Test3" type="BOOLEAN"/>

【问题讨论】:

您是否也尝试将其从文档中删除,还是仅从列表中删除?你能用 LINQ to XML 代替吗? (我通常发现它比旧的 DOM API 更好。) 我不想从文档中删除它我只想从 XmlNodelist xnlSubParam 中删除它 签出此链接.. 我发现它在使用 LinqToXML 进行谷歌搜索删除节点 - ***.com/questions/10378498/… 不,先生,它不工作......他们给了我不需要的 XmlDocument 你能把这张图片放大一下吗?需要有非凡的远见才能看到,您正在使用的 XML 在哪里......? 【参考方案1】:

我不知道有什么方法可以改变XmlNodeList 本身。我建议您将节点复制到 List&lt;XmlNode&gt; 中,然后您可以按照正常方式对其进行变异:

List<XmlNode> nodes = xnlSubParam.Cast<XmlNode>().ToList();
// Now work with nodes

要使用这些 LINQ 方法,您需要一个 using 指令:

using System.Linq;

当然,这只适用于 .NET 3.5 及更高版本(除非您使用的是 LINQBridge 或类似的东西)。

请注意,我个人会在整个过程中使用 LINQ to XML:

var doc = XDocument.Load(somexml);
var nodes = doc.Descendants("tag")
               .First()
               .Elements("subparam")
               .ToList();

【讨论】:

不,它没有工作它在.Cast附近显示问题,因为Xmnode中没有Cast .. @user1903774:这是一种扩展方法 - 您需要为 System.Linq 指定一个 using 指令。我假设您使用的是 .NET 3.5 或更高版本,请注意 - 是吗? @user1903774:嗯,System.Xml.LinqSystem.Linq 不一样……你需要一个 System.Linq 的 using 指令。但是如果您使用 LINQ to XML...,则不清楚为什么要使用旧的 DOM API @user1903774:请编辑您的 question(而不是在我的答案中添加不相关的 cmets)显示您的 XML(不是屏幕截图)并给出一个 clear表明你想要达到的目标。阅读tinyurl.com/so-list 我现在放弃了,我害怕。我已经解释了如何将节点列表复制到List&lt;&gt;,然后您可以根据需要对其进行变异。完全不清楚为什么你不能只使用我的答案 - 因为我解释说你需要 System.Linq 的 using 指令,你没有提供更多信息说明为什么我的答案对你不起作用。

以上是关于如何使用 C# 从 XML 节点列表中删除节点的主要内容,如果未能解决你的问题,请参考以下文章

如何从xml中删除列表父节点?

如何在 C# 中从 XML 中删除选定的节点?

3 尝试使用 C# 删除 XML 节点

C# 操作xml 在指定节点插入新节点,该如何操作?

如何使用多个 XPath 查询在 c# 中选择单个 XML 节点

如何根据条件从 XML 中删除节点?