如何使用xDocument和Linq选择元素的孙元素

时间:2016-05-19 10:20:33

标签: c# linq linq-to-xml

我有这个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属性名称=&#34; PREF_EXAMPLE_2&#34;

时的默认值

我明白了:

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

它为我提供了首选属性而不是它的子属。

我该怎么办呢?

1 个答案:

答案 0 :(得分:3)

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

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

这将为您提供所有匹配首选项的默认值IEnumerable<bool>