正如我在标题中所说:我试图删除特定的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#)。
答案 0 :(得分:2)
首先,您发布的代码使用SelectSingleNode
,它将始终只返回一个节点。
要做的第一件事:使用文档为here的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查询,如解释here。