なぜ、この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()
は、あなたが望むものであるノードセット上で実行されます。ラムダは、子要素を持っているそれらの要素を選択し、また、値が「somekeyを」属性「name」を持っています。
あなたの元のコードは、お子様の-子要素を取得していませんでした。したがって、元の結果セットが空でした。
また.Descendants()
でこれを行うことができますが、それは私には、少しずさんとゆるい感じています。
所属していません StackOverflow