取得したいxml子ノードを持つHashSetがあります。LINQを使用した値のHashSetから親の子孫を確認する
のxml:
<team>
<bob>a</bob>
<mary>b</mary>
<joe>c</joe>
</team>
<team>
<john>d</john>
</team>
HashSetの:
HashSet<string> people = new HashSet<string> { "mary", "joe", "john" };
LINQ:
IEnumerable<XElement> result = from d in doc.Descendants("team")
where people.Contains(d.Descendants().Name.LocalName)
select d;
私はすべてのチャイルズを取得しようとも親を返すために、次のLINQ(動作しない)を使用しています
返信:
<team>
<mary>b</mary>
<joe>c</joe>
</team>
<team>
<john>d</john>
</team>
しかし動作しません。どんな助けもありがとう。ありがとう。
何も返さない、私は完全な例を追加してい1
更新#、:
public void test1()
{
var xml =
@"<?xml version=""1.0"" encoding=""utf-8""?>
<hereistheroot>
<team>
<bob>a</bob>
<mary>b</mary>
<joe>c</joe>
</team>
<team>
<john>d</john>
</team>
</hereistheroot>";
XElement doc = XElement.Parse(xml);
HashSet<string> people = new HashSet<string> { "mary", "joe", "john" };
IEnumerable<XElement> result = from d in doc.Descendants("team")
where people.Contains(d.Name.LocalName)
select d;
}
それは何も返しません。 、テストのためにLINQで "どこ" 条項を削除し、それは以下となります。
まず1:
<team>
<mary>b</mary>
<joe>c</joe>
</team>
二つ目:
<team>
<john>d</john>
</team>
注これは、2つのXElementオブジェクトを返す必要があります2つのXElementオブジェクトを正しく返しますが、これが主な問題です.HashSetに基づいて人を選択できるようにするには、「Where」節を取得する必要があります。ありがとう。
代わりに結果は何ですか?また、上記のXMLは有効なXMLではありません。なぜなら、名前ノード上の終了タグが与えられていないからです。 ( ''の代わりに ' ')。また、XMLに複数のルート要素があるように見えますが、これは許可されていません。 –
マックス、ありがとう、それが修正されました。結果はありません.d.Descendants()。Name.LocalNameにエラーがあります。 –
doc.ElementsにおけるDからのLINQクエリ '( "チーム")子孫()people.Contains(d.Name.LocalName)は、Dを選択し、' 'ノード B C D 'を返し、メンバーが変更された2つの ''ノードの結果セットが必要なのでしょうか?それとも、あなたが望むもの、3ノードの結果セットですか?必要に応じて、いつでもコード内のこれら3つのノードの親にアクセスすることができます。 –