我试图按属性的值对我的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 for Windows Phone 7。
如果有任何帮助,我将不胜感激。
-
更新
感谢您的快速回复!
juharr问了一个很好的问题......我期待OrderBy
会修改data
。现在我知道我错了。
我想修改data
,我做了如下(感谢Matt Lacey):
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
?
答案 0 :(得分:1)
根据您链接的问题,这有效:
var people = from p in data.Elements("person")
orderby (string)p.Attribute("id")
select p;
或
var people = data.Elements("person").OrderBy(p => (string)p.Attribute("id"));
(在手机上测试也确认。)
答案 1 :(得分:1)
我希望这有助于你
var people = data.Elements("person").OrderBy(p => (string)p.Attribute("id")).ToArray();
data.Descendants("person").Remove();
data.Element("persons").Add(people);
不要忘记为people
使用ToArray()方法。