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,那么删除它(就像"!

c#中目标特定的Xml节点

首先,您发布的代码使用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查询,正如这里所解释的。