【问题标题】:How to Select a grandchild element of a element using xDocument and Linq如何使用 xDocument 和 Linq 选择元素的孙元素
【发布时间】:2016-05-19 10:20:33
【问题描述】:

我有这个 XML 标记:

<preferences>
  <section name="PREF_SECTION_NAME_1">
    <preference name="PREF_EXAMPLE_1" type="text">
      <default value="false"></default>
    </preference>
    <preference name="PREF_EXAMPLE_2" type="radio">
      <default value="true"></default>
    </preference>
    <preference name="PREF_EXAMPLE_3" type="radio">
       <default value="false"></default>
    </preference>
  </section>
  <section name="PREF_SECTION_NAME_2">
    <preference name="PREF_EXAMPLE_4" type="radio">
      <default value="true"></default>
    </preference>
    <preference name="PREF_EXAMPLE_5" type="radio">
      <default value="false"></default>
    </preference>
    <preference name="PREF_EXAMPLE_6" type="radio">
      <default value="true"></default>
    </preference>
  </section>
</preferences>

我想获取 Preference 属性名称 = "PREF_EXAMPLE_2" 时的默认值

我知道了:

var t = from p in xDocUser.Descendants("preference").Attributes("name").Where(d=>d.Value==preferencename) select p;

这给了我偏好的属性,但不是它的孩子。

请问我该怎么做?

【问题讨论】:

  • 其实它只是给你属性,而不是元素。目前还不清楚您要达到什么目的,或者为什么要使用只是 from p in (some stuff) select p 的查询表达式。
  • @JonSkeet 嗨,乔恩,感谢您的评论。我想从 xDocument 获取 Preference 属性名称 = "PREF_EXAMPLE_2" 时的默认值。您是否建议不要使用 linq?
  • 我应该添加我正在将 xml 文档加载到 xDocument 中。您是否还建议我应该坚持使用 xml selectnodes 等?谢谢
  • 不,我不是建议您不要使用 LINQ - 但我建议您不要使用无意义的查询表达式。要么使用有意义的查询表达式(例如使用where 子句),要么只使用基于 lambda 的方式。

标签: c# linq linq-to-xml


【解决方案1】:

嗯,是的,您要求的是偏好属性。听起来你实际上想要这样的东西:

var defaults = from pref in xDocUser.Descendants("preference")
               where (string) pref.Attribute("name") == preferenceName
               select (bool) pref.Element("default").Attribute("value");

这将为您提供所有匹配首选项的默认值IEnumerable&lt;bool&gt;

【讨论】:

  • 我的意图是获取满足条件的 Preference 的子节点。我知道我的代码是错误的。我刚刚发现 xDocument 并且我是 linq 的新手 :) 我更喜欢通过示例学习,但显然我在 Google 搜索中提出问题的方式是错误的。谢谢你可怜我!
  • @AndrewSimpson:如果您只想要元素,则将 select 子句更改为 select pref.Element("default")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 2021-07-22
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 2013-08-24
相关资源
最近更新 更多