LINQクエリで情報を抽出しようとしているxmlがあります。
xmlファイルの形式は、次のようになります。XMLからクラスへのコンテンツをパースするLINQクエリ
<TopNode>
<Sample name="Tom" id="0" batch="1">
<Sequences>
<NextItem id="10">Stand1 ></NextItem>
<PreviousItem id="9">Stand2 ></PreviousItem>
</Sequences>
</Sample>
<Sample name="Hill" id="1" batch="1">
<Sequences>
<NextItem id="1">Stand1 ></NextItem>
<NextItem id="2">Stand3 ></NextItem>
<PreviousItem id="3">Stand4 ></PreviousItem>
</Sequences>
</Sample>
.
.
.
</TopNode>
私は、クエリからNextItem
とPreviousItem
両方の属性のリストを取得する必要があります。このために、結果を得るためのクラスを定義しました。
public class Extract
{
public string name
{
get;
set;
}
public int _id
{
get;
set;
}
}
LINQクエリ(foreachのサンプルノード、クラスオブジェクトでPreviousItemとNextItemコンテンツを取得):
var EnumerableContent = from item in XElement.Load("file.xml").Elements("NextItem")
select ???...
問題は、私はここに上記のクエリでクラスオブジェクトにデータを渡す行う方法です各サンプルノードについて
。 第二に、上記の私だけNextItemノードを取得します。 NextItemとPreviousItemの両方のクエリを書くにはどうしたらいいですか?全体的に
EDIT 、私はSequence
ノードのそれぞれについて、それぞれのIEnumerableを取得した後、チエニルクエリからの全体的なIEnumerableをを返すことがあります。
EDIT2 ここにkey
を割り当てると、このエラーが発生します。
var mapping = XDocument.Load("file.xml")
.Descendants("Sequences")
.Select(n => n.Descendants("PreviousItem")
.Union(n.Descendants("NextItem"))
.Select(n1 => new Extract { _id = (int)n1.Attribute("id"), Name = n1.Value })
).ToDictionary<IEnumberable<Menu>, int>(key => key._id);//and further converting this dictionary to sorted dictionary (sorted accordign to keys)
これは私にIEnumerableを与えるでしょう。 NextItem、およびPreviousItemをxmlに追加します。私が実際に望むのは、Sequenceノードのそれぞれに対して、列挙型を生成して、上記の全体のIEnumberableを返す必要があるということです。私は問題を伝えたいと思います。 ; -/ – Cipher
@Cipher答えを更新しました。私はあなたを正しく理解してくれることを願っています。 –
ありがとう!はい。しかし、私がExtarctクラスを書いたのは、結果を辞書に変換したいということでした。つまり、 '.ToDictionary'です。ここで 'TValue'はExtractクラスのIEnumberableです。上記のステートメントでは、 '.Select(新しいMenu {SeekPoint =(int)n1.Attribute(" time ")、ItemText = n1.Value})を実行できません。 –
Cipher