我試圖通過屬性的值來排序我的xml文件,但沒有運氣。如何使用屬性值對linq中的XML文檔進行排序?
data.Descendants("person").OrderBy(x => x.Attribute("id").Value);
數據包含:
<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>
給出here回答沒有爲我工作。
我使用MVS 2010爲Windows Phone 7的
我會感謝任何幫助。
-
更新
感謝您的快速反應!
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 2011-01-05 12:47:40
您是在捕獲'OrderBy'的結果,還是期望修改'data'? – juharr 2011-01-05 13:24:37
我知道這是一個古老的問題。但是,如Dima所說,通過添加.ToList()或.ToArray()來避免數據變量變量。 'stuff.OrderBy(...)。ToList()'在添加到人員時阻止IEnumerable爲空。 – Mixxiphoid 2014-04-02 16:48:27