简体   繁体   English

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

[英]How to Select a grandchild element of a element using xDocument and Linq

I have this XML markup: 我有这个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>

I want to get the default value for when the Preference attribute name = "PREF_EXAMPLE_2" 我想获取Preference属性name =“PREF_EXAMPLE_2”时的默认值

I got this: 我懂了:

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

which gives me the Attributes for preference but not its child. 它给了我偏好的属性,但不是它的子。

How can i do this please? 我该怎么办?

Well yes, you're asking for the attributes of preference. 是的,你要求偏好的属性。 It sounds like you actually want something like: 听起来你真的想要这样的东西:

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

That will give you an IEnumerable<bool> of the default values for all the matching preferences. 这将为您提供所有匹配首选项的默认值的IEnumerable<bool>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM