在c#中定位特定的Xml节点

时间:2014-08-04 06:33:56

标签: c# xml

正如我在标题中所说:我试图删除特定的XML节点(在c#中)。

所以我研究并找到this

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然后删除它(就像"!=" -Operator)在C#)。

1 个答案:

答案 0 :(得分:2)

首先,您发布的代码使用SelectSingleNode,它将始终只返回一个节点。

要做的第一件事:使用文档为hereSelectNodes

结果将是:

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查询,如解释here