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