我有以下xml“example”
<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>
我试图选择说“
”的“名称”属性值<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" />
一个,但包含 bool仍然是假的
如果有人可以请指出正确的方法来执行select \ where或perharps甚至是一种完全不同的更有效的方法来检索其子节点属性值等于传入的属性值的一个属性值
由于
答案 0 :(得分:3)
您只需更改Where
条件:
where p.Descendants("property").Any(x => (string)x.Attribute("name") == "In")
Any
会检查是否有任何元素的name
属性等于In