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

本文关键字:XML 对象 节点 搜索 字符串 | 更新日期: 2024-11-01 02:45:21

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

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

我尝试使用:

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

XML文件:

 <a>
        <a1>
           <a12>
                  <aRemove> </aRemove>
           </a12>
        </a1>
        <a2>
        <a2>
   </a>

它永远不会找到该节点。我的 XML 是不同的...一个在<a1></a1><aRemove>,另一个在<b><b3></b3></b>里面.

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

<a2=t655> </a2>

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

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

使用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();

你可以做这样的事情:

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