我想找到具有具体attribute.value。
的Xelement attribute.valuestring fatherName = xmlNX.Descendants("Assembly")
.Where(child => child.Descendants("Component")
.Where(name => name.Attribute("name").Value==item))
.Select(el => (string)el.Attribute("name").Value);
我如何获得attribute.value?这说什么是布尔?
EDITED 最初我有以下XML:
<Assembly name="1">
<Assembly name="44" />
<Assembly name="3">
<Component name="2" />
</Assembly>
</Assembly>
我需要获取attribute.value,其子元素(XElement)具有一个expecific attribute.value 在这个例子中,我会得到字符串&#34; 3&#34;因为我正在搜索孩子的父母哪个属性。值==&#34; 2&#34;
答案 0 :(得分:2)
由于嵌套Where
子句的编写方式。
内部子句读取
child.Descendants("Component").Where(name => name.Attribute("name").Value==item)
此表达式的结果为IEnumerable<XElement>
,因此外部子句读取
.Where(child => /* an IEnumerable<XElement> */)
但是Where
需要Func<XElement, bool>
类型的参数,在这里你最终传入Func<XElement, IEnumerable<XElement>>
- 因此错误。
我没有提供更正版本,因为您的意图根本不清楚给定的代码,请相应地更新问题。
<强>更新强>
看起来你想要这样的东西:
xmlNX.Descendants("Assembly")
// filter assemblies down to those that have a matching component
.Where(asm => asm.Children("Component")
.Any(c => c.name.Attribute("name").Value==item))
// select each matching assembly's name
.Select(asm => (string)asm.Attribute("name").Value)
// and get the first result, or null if the search was unsuccessful
.FirstOrDefault();
答案 1 :(得分:1)
我想你想要
string fatherName = xmlNX.Descendants("Assembly")
.Where(child => child.Elements("Component").Any(c => (string)c.Attribute("name") == item))
.Select(el => (string)el.Attribute("name")).FirstOrDefault();