【发布时间】:2015-02-23 12:06:51
【问题描述】:
我有以下xml“示例”
<methods>
<method name="listcust" >
<objects>
<object name="ExampleTest" type="" version="">
<properties>
<property name="FirstName" type="text">
<mappings>
<mapping type="property">
<property name="fn" />
</mapping>
</mappings>
</property>
<property name="LastName" type="text">
<mappings>
<mapping type="property">
<property name="ln" />
</mapping>
</mappings>
</property>
<property name="BirthDate" type="datetime">
<mappings>
<mapping type="property">
<property name="bd" />
</mapping>
</mappings>
</property>
</properties>
</object>
</objects>
</method>
</methods>
我正在尝试选择say的“名称”属性值
<property name="LastName" type="text">
当该元素内的属性的“名称”
等于“ln”<property name="ln" />
我尝试了以下
var query = from p in xdoc.Descendants("property")
where p.Descendants("property").Attributes("name").Contains(new XAttribute("name", "ln"))
select p.Attribute("name").Value;
var res = query.ToList<string>();
但我得到的结果为零。
如果我一步一步地分解它
XDocument xdoc = XDocument.Parse(xml);
var props = xdoc.Descendants("property").Descendants("property");
var nameAtt = props.Attributes("name");
var contains = nameAtt.Contains(new XAttribute("name", "ln"));
然后我可以看到 nameAtt 包含属性列表,包括 <property name="ln" /> 之一,但 contains 布尔值仍然是 false
如果有人能指出执行 select\where 的正确方法,或者甚至是一种完全不同的更有效的方法来检索一个属性值,其中它的子节点属性值等于传入的那个值
谢谢
【问题讨论】: