Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用xDocument和Linq选择元素的孙子元素_C#_Linq_Linq To Xml - Fatal编程技术网

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

C# 如何使用xDocument和Linq选择元素的孙子元素,c#,linq,linq-to-xml,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"

我有以下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>
这为我提供了首选项的属性,但不是它的子项


我怎样才能做到这一点呢?

是的,您是在询问偏好的属性。听起来你真的想要这样的东西:

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

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

实际上它只提供属性,而不是元素。现在还不清楚您想要实现什么,或者为什么要使用一个查询表达式,它只是p中的
(一些东西)选择p
@JonSkeet Hi Jon,谢谢您的评论。我想从xDocument获取首选项属性name=“PREF_EXAMPLE_2”的默认值。您是否建议不要使用linq?我应该补充一点,我正在将xml文档加载到xDocument中。您是否也建议我只使用xml selectnodes等?谢谢,我不是建议您不要使用LINQ,而是建议您不要使用无意义的查询表达式。要么使用有意义的查询表达式(例如使用
where
子句),要么只使用基于lambda的方式。我的目的是获取满足条件的首选子节点。我知道我的密码错了。我刚刚发现了xDocument,我是linq的新手:)我更喜欢通过示例学习,但显然我在谷歌搜索中用词提问的方式是错误的。谢谢你怜悯我@AndrewSimpson:如果只需要元素,那么将select子句更改为
select pref.element(“默认”)
var defaults = from pref in xDocUser.Descendants("preference")
               where (string) pref.Attribute("name") == preferenceName
               select (bool) pref.Element("default").Attribute("value");