为什么不是这样的XElement查询工作在我的XML
-
18-09-2019 - |
题
我的XML看起来像:
<nodes>
<node name="somekey">
<item name="subject">blah</item>
<item name="body">body</item>
</node>
</nodes>
和到目前为止我的代码是:
XDocument doc = XDocument.Load(HttpContext.Current.Server.MapPath(String.Format("~/files/{0}/text.xml", "en")));
if (doc != null)
{
XElement element = doc.Elements().Where(e => e.Elements().Any() && e.Attribute("name").Value == "someKey").First();
}
我收到一个错误说:
Sequence contains no elements
是我的查询错了吗?
<强>我通过代码台阶,并且它的错误列于同的XElement行.. 强>
解决方案
您想是这样的:
var element = doc.Descendants("node").Where(x => x.Attribute("name") != null && x.Attribute("name").Value == "somekey").FirstOrDefault();
修改强>编辑,以抓住从结果第一元件;
其他提示
您也可以使用:
var element = doc.Elements()
.Elements()
.Where(e => (e.Elements().Any()
&& e.Attribute("name").Value == "somekey"))
.First();
说明:
在doc.Elements()
抓住根元素,其是nodes
。然后.Elements()
选择的是子元素,这只是其中的一个,node
。该.Where()
然后在该节点集,这是你想要的执行。拉姆达选择那些有子元素,也有一个“name”属性值为“somekey”元素。
您原始代码没有得到的小孩子的 - 子元素。因此,原来的结果集是空的。
您也可以做到这一点与.Descendants()
但感觉有点草率和松,给我。
不隶属于 StackOverflow