質問

私の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()でこれを行うことができますが、それは私には、少しずさんとゆるい感じています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top