如何使用 xDocument 和 Linq Select 元素的孙元素
How to Select a grandchild element of a element using xDocument and Linq
我有这个 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;
这给了我偏好的属性但不是它的 child。
请问我该怎么做?
嗯,是的,您要求的是偏好属性。听起来你真的想要这样的东西:
var defaults = from pref in xDocUser.Descendants("preference")
where (string) pref.Attribute("name") == preferenceName
select (bool) pref.Element("default").Attribute("value");
这将为您提供所有匹配首选项的 IEnumerable<bool>
默认值。
我有这个 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;
这给了我偏好的属性但不是它的 child。
请问我该怎么做?
嗯,是的,您要求的是偏好属性。听起来你真的想要这样的东西:
var defaults = from pref in xDocUser.Descendants("preference")
where (string) pref.Attribute("name") == preferenceName
select (bool) pref.Element("default").Attribute("value");
这将为您提供所有匹配首选项的 IEnumerable<bool>
默认值。