在C#中的不同XML对象上按字符串搜索XML节点

时间:2013-12-19 05:25:09

标签: c# .net xml

我正在寻找一种通过名称搜索和删除节点的方法。

我有XML例如,我想删除节点<aRemove>

我尝试使用:

xmlDoc.SelectNodes("//aRemove");
xmlDoc.SelectNodes(".//aRemove");
xmlDoc.SelectNodes("a aRemove");

XML文件:

 <a>

        <a1>
           <a12>
                  <aRemove> </aRemove>
           </a12>

        </a1>

        <a2>

        <a2>

   </a>

它从未找到该节点。我的XML不同......一个<aRemove> <a1></a1><b><b3></b3></b>内的<a2=t655> </a2>

编辑:某些XML中的某些节点具有属性,例如:

{{1}}

如何按字符串搜索节点并将其删除为每个节点不同的XML?

2 个答案:

答案 0 :(得分:1)

使用System.Xml.Linq可能很容易。

 var xml = XElement.Parse(xmlString);//alternatively, you can load xml from file with XElement.Load(filepath)
 xml.XPathSelectElements(".//aRemove").Remove();

修改

正如Alexei Levenkov在评论中建议的那样,如果aRemove元素具有与之关联的名称空间,并且您想要删除名称为aRemove的所有元素,则无论它们属于哪个名称空间,您都可以尝试使用xpath ".//*[local-name()='aRemove']。带有xml linq的代码片段将是

 var xml = XElement.Parse(xmlString);//alternatively, you can load xml from file with XElement.Load(filepath)
 xml.XPathSelectElements(".//*[local-name()='aRemove']").Remove();

答案 1 :(得分:0)

你可以这样做:

        string fileName = @"c:\test\test.xml";
        XDocument doc = XDocument.Load(fileName);
        doc.Descendants("aRemove").Remove<XElement>();
        doc.Save(fileName);