【问题标题】:LinqToXML: Getting elements with given valueLinqToXML:获取具有给定值的元素
【发布时间】:2009-04-23 18:41:05
【问题描述】:

我有这个 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;

那行不通..

【问题讨论】:

  • 你能定义“不起作用”吗?它会导致编译器错误吗?它是否返回一个集合,空的还是其他的?
  • “不起作用”,如“枚举未产生任何结果”。

标签: c# linq linq-to-xml


【解决方案1】:

我想你正在寻找

xml.Descendants("value")

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

【讨论】:

  • 是的,后代和价值的修整解决了我的问题。谢谢。
【解决方案2】:

您应该使用 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;

【讨论】:

    【解决方案3】:
     var objects = from e in xml.Descendants("object").Elements("value")
                              where e.Value.Equals("foo", StringComparison.OrdinalIgnoreCase)
                              select e.Parent;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2011-10-17
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      相关资源
      最近更新 更多