如何使用 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<XmlNode>
中,然后您可以按照正常方式对其进行变异:
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.Linq
和 System.Linq
不一样……你需要一个 System.Linq
的 using 指令。但是如果您也使用 LINQ to XML...,则不清楚为什么要使用旧的 DOM API
@user1903774:请编辑您的 question(而不是在我的答案中添加不相关的 cmets)显示您的 XML(不是屏幕截图)并给出一个 clear表明你想要达到的目标。阅读tinyurl.com/so-list
我现在放弃了,我害怕。我已经解释了如何将节点列表复制到List<>
,然后您可以根据需要对其进行变异。完全不清楚为什么你不能只使用我的答案 - 因为我解释说你需要 System.Linq
的 using 指令,你没有提供更多信息说明为什么我的答案对你不起作用。以上是关于如何使用 C# 从 XML 节点列表中删除节点的主要内容,如果未能解决你的问题,请参考以下文章