c#中目标特定的Xml节点
本文关键字:Xml 节点 目标 | 更新日期: 2023-09-27 18:16:19
正如我在标题中所说:我试图删除一个特定的XML节点(在c#中)。
所以我研究了一下,发现了这个:
XmlDocument xmlDoc = new XmlDocument();
XmlNode nodeToDelete = xmlDoc.SelectSingleNode("/root/XMLFileName[@ID="+nodeId+"]");
if (nodeToDelete != null)
{
nodeToDelete.ParentNode.RemoveChild(nodeToDelete);
}
xmlDoc.Save("XMLFileName.xml")
我理解他是针对一个特定的节点(在这个例子中是"[@ID ="+nodeId+
)
好吧,我的问题是我能以相反的方式做同样的事情吗?我的意思是,如果它不是nodeId
,那么删除它(就像"!
首先,您发布的代码使用SelectSingleNode
,它将始终只返回一个节点。
首先要做的是:使用SelectNodes
,其文档在这里。
结果将是:
List<XmlNode> nodes = new List<XmlNode>(
xmlDoc.SelectNodes("//root/XMLFileName[@ID!="+nodeId+"]")
.Cast<XmlNode>());//execute the query and put it into a list
// as my list is strongly typed, I **must** use cast method
// thanks to this list, I can modify the document without changing the
// collection that foreach is traversing
foreach(var nodeToDelete in nodes){
if (nodeToDelete != null)
{
nodeToDelete.ParentNode.RemoveChild(nodeToDelete);
}
}
xmlDoc.Save("XMLFileName.xml")
你也可以在c#中使用linq查询,正如这里所解释的。