我一直在使用VB.Net中的LINQ以及其他一些尝试根据属性值删除XML节点的事情。基本上,如果我的XML文档中的任何节点具有特定值的属性,例如“cats”,我想删除它。
问题是我不会确切地知道XML结构的样子,所以我不能给出路径。另外,我知道一些可能包含“猫”的属性,但我不想在可能的情况下对它们进行硬编码。
所以,换句话说,我没有设置XML结构,我想删除任何有“猫”作为属性值的节点,比如Caption =“cats”或Title =“cats”,任何地方在节点中。如果它有“猫”,那就去核。
这一切都可能吗?或者我只是需要放弃这个项目?
顺便说一句,我正在尝试用VB.Net编写解决方案,但如果有人碰巧知道如何实现这一点但我只能提供C#代码,那么我完全有能力阅读和转换C#。非常感谢您的帮助!
答案 0 :(得分:1)
您可以使用以下方式执行此操作:
XDocument.Descendants()
遍历文档中的所有元素。XElement.Attributes()
循环遍历元素的所有属性,以查看是否有任何值为“cats”。Extensions.Remove()
删除所有具有匹配属性值的元素。在c#中,这变为:
var doc = XDocument.Parse(xmlString);
var attributeValue = "cats";
doc.Descendants().Where(e => e.Attributes().Any(a => (string)a == attributeValue)).Remove();
在VB.NET中:
Dim doc = XDocument.Parse(xmlString)
Dim attributeValue = "cats"
doc.Descendants().Where(Function(e) e.Attributes().Any(Function(a) CStr(a) = attributeValue)).Remove()
示例fiddle。