我正在寻找一种通过名称搜索和删除节点的方法。
我有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?
答案 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);