LinqToXML:获取具有给定值的元素

时间:2009-04-23 18:41:05

标签: c# linq linq-to-xml

我有这个xml文件:

<objects>
  <object> 
    <value>test</value>
  </object>
  <object> 
    <value>foo</value>
  </object>
  <object> 
    <value>bar</value>
  </object>      
</objects>

现在,我想查询这个xml,并检索value-element =“foo”中文本所在的所有对象元素

有一种简单的方法吗?

我尝试过这样的事情:

var objects = from e in xml.Elements("value")
              where e.Value.Equals("foo", StringComparison.OrdinalIgnoreCase)
              select e.parent;

这不起作用..

3 个答案:

答案 0 :(得分:3)

我认为你正在寻找

xml.Descendants("value")

xml.Elements()只返回子元素...如果xml是你的根XDocument,它就不会返回任何内容。

答案 1 :(得分:1)

假设您从文档根目录查询,则应使用 xml.Descendants 。另外,我更喜欢使用 string.Equals 而不是 Equals 方法调用该元素的 Value 属性返回的字符串(仅作为一个偏好的问题。)例如:

var objects = from e in xml.Descendants("value")
                where string.Equals(e.Value, 
                                    "foo", 
                                    StringComparison.OrdinalIgnoreCase)
                select e.Parent;

答案 2 :(得分:0)

 var objects = from e in xml.Descendants("object").Elements("value")
                          where e.Value.Equals("foo", StringComparison.OrdinalIgnoreCase)
                          select e.Parent;