【问题标题】:How to sort XML document in linq by an attribute value?如何按属性值对 linq 中的 XML 文档进行排序?
【发布时间】:2011-01-05 12:45:53
【问题描述】:

我尝试按属性值对我的 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 的答案对我不起作用。

我正在为 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 为空,仅包含 &lt;persons /&gt;

我想知道现在出了什么问题。


我设法通过使用此代码解决了我的问题:

    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);

是否有其他方式(更优雅)使用OrderBy 修改data 而不是创建datatemp

【问题讨论】:

  • 你能说得更具体一点吗?
  • 您是在捕获OrderBy 的结果还是希望它修改data
  • 我知道这是一个古老的问题。但是您可以通过添加 .ToList() 或 .ToArray() 来避免 datatemp 变量,如 Dima 所说。 stuff.OrderBy(...).ToList() 防止您的 IEnumerable 在添加到人员时为空。

标签: c# xml linq sorting windows-phone-7


【解决方案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"));

(也用手机测试确认。)

【讨论】:

  • 这个会按照int.sort的string.sort排序吗?
【解决方案2】:

希望对你有帮助

var people = data.Elements("person").OrderBy(p => (string)p.Attribute("id")).ToArray();

data.Descendants("person").Remove();
data.Element("persons").Add(people);

不要忘记为您的people 使用 ToArray() 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多