xml树需要根据属性进行过滤。子元素与父元素具有相同的名称。如果满足显示元素的标准,则需要显示此元素和所有父级结构。如何根据子属性过滤XDocument并保留父结构?
例如在xml样子(深度级别是随机的):
<Root>
<Foo attr="xyz 123"></Foo>
<Foo attr="abc 111"></Foo>
<Foo attr="abc 222">
<Foo attr="abc 111"></Foo>
<Foo attr="abc 222">
<Foo attr="xyz 123"></Foo>
</Foo>
</Foo>
</Root>
过滤准则是,该属性 “ATTR” 包含文本 “XYZ”。过滤后的xml应该像:
<Root>
<Foo attr="xyz 123"></Foo>
<Foo attr="abc 222">
<Foo attr="abc 222">
<Foo attr="xyz 123"></Foo>
</Foo>
</Foo>
</Root>
XDocument
用于保持树结构(后XDocument_instance.Elements()
连接到WPF树视图)。
以下LINQ的命令执行排序只有第一元素水平(根后):
var Elements = from el in xdoc.Root.Elements()
where
el.Attribute("attr").Value.Contains("xyz")
select el
如何创建一个LINQ命令(或foreach循环),这将应用描述的滤波?
编辑: 一个首选的解决方案不会修改原始数据,但会为视图创建另一个(即Linq查询)。
这是一个非常好的解决方法,但它修改了原始树。对不起,我没有在问题中指明。我必须在过滤之前进行深层复制(因为稍后可能会应用另一个过滤器)。一个首选的解决方案是Linq查询。 – bitman