xmlファイルを属性の値でソートしようとしました。linqのXML文書を属性値でソートする方法は?
data.Descendants("person").OrderBy(x => x.Attribute("id").Value);
データが含まれていますhere与え
<persons>
<person id="1">
<name>Abra</name>
<age>25</age>
</person>
<person id="2">
<name>Cadabra</name>
<age>29</age>
</person>
<person id="4">
<name>Hokus</name>
<age>40</age>
</person>
<person id="3">
<name>Pokus</name>
<age>30</age>
</person>
</persons>
回答が私のために動作しません。
私は任意の助けのために感謝されるのWindows Phone 7
ためMVS 2010を使用しています。
-
更新
迅速な応答をありがとう!
juharrが良い質問をしました...私はOrderBy
がdata
を修正すると予想していました。今私は間違っていたことを知っている。
私はdata
を変更すると、次のように私は(感謝マット・レイシー)やった:
var people = data.Elements("person").OrderBy(p => (string)p.Attribute("id"));
data.Descendants("person").Remove();
data.Element("persons").Add(people);
を私はまだ何も得ませんでした。 Data
は空です、それだけが含まれています<persons />
私は今何が間違っているのだろうか。
私はこのコードを使用して私の問題を解決するために管理します。
XDocument datatemp = new XDocument(data);
var people = datatemp.Descendants("person").OrderBy(x => (int)int.Parse(x.Attribute("id").Value));
data.Descendants("person").Remove();
data.Element("persons").Add(people);
を変更するには(よりエレガントな)他の方法であるdata
OrderBy
を使用して代わりにdatatemp
を作成しますか?あなたがにリンクされている質問、この作品に基づいて
あなたは「運がいい」より具体的になりますか? – fejesjoco
'OrderBy'の結果をキャプチャしているのですか、それとも' data'を変更する予定ですか? – juharr
これは古くからの質問です。しかし、Dimaによると、.ToList()または.ToArray()を追加することでdatatemp変数を回避できます。 'stuff.OrderBy(...).ToList()'は、人に追加するときにIEnumerableが空でないようにします。 – Mixxiphoid