C# 如何使用LINQ选择XML文档中包含特定字符串的所有属性

C# 如何使用LINQ选择XML文档中包含特定字符串的所有属性,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,类似于但不使用XPath。可能吗 <c BarFoo="val1"> <d Foo="val2" someAttribute=""> <e FooBar="val3" /> </d> </c> 基本上,我想选择文档中属性名称包含“Foo”的所有属性值,因此它应该返回“BarFoo”、“FooBar”、“Foo”(va1、val2、val3)的值,如下所示: elem.DescendantsAndSelf()

类似于但不使用XPath。可能吗

<c BarFoo="val1">
   <d Foo="val2" someAttribute="">
      <e FooBar="val3" />
   </d>
</c>

基本上,我想选择文档中属性名称包含“Foo”的所有属性值,因此它应该返回“BarFoo”、“FooBar”、“Foo”(va1、val2、val3)的值,如下所示:

elem.DescendantsAndSelf().Attributes().Where(a => a.Name.LocalName.Contains("Foo"))

我的出发点是将XML字符串解析为XElement对象

var query = element.DescendantsAndSelf().Attributes()
    .Where(attr => attr.Name.LocalName.Contains("Foo"))
    .Select(attr => new { Name = attr.Name, Value = attr.Value });
其结果是一个匿名类型的IEnumerable,包含每个属性的名称和值

BarFoo  val1
Foo     val2
FooBar  val3