如何根据子节点对XDocument父节点进行排序?

时间:2013-05-14 20:15:48

标签: c# xml linq linq-to-xml

在c#中,我试图使用OrderByDesending对XDocument进行排序。目标是读取一个包含日期\时间戳的子节点,并重新排序父节点。

我从保存的文件中加载XML,如下所示:

XDocument Doc = new XDocument();
Doc= XDocument.Load(filename);

以下是我的XML

的示例
<KS>
  <Team>   
    <TeamName>Knights</TeamName>
    <TeamColor>blue</TeamColor>
    <LastAccessed>5/9/2013 2:34:22 PM</LastAccessed>
  </Team>
  <Team>
    <TeamName>Rangers</TeamName>
    <TeamColor>red</TeamColor>
    <LastAccessed>5/9/2013 3:49:06 PM</LastAccessed>
  </Team>
  <Team>
    <TeamName>Eagles</TeamName>
    <TeamColor>green</TeamColor>    
    <LastAccessed>5/9/2013 3:50:18 PM</LastAccessed>
  </Team>
</KS>

我想根据子元素重新排序降序

我试过以下没有运气

var results = Doc.Root.Descendants("Team").OrderByDescending(p => p.Element("LastAccessed"));

XDocument node = new XDocument(Doc.Descendants("KS").OrderByDescending(x => x.Element("Team").Element("LastAccessed").Value.Trim()));

有关如何根据存储在子节点中的值对XML父节点进行排序的任何建议吗?

2 个答案:

答案 0 :(得分:5)

您应该收到错误消息:

  

至少有一个对象必须实现IComparable。

请在问题中始终包含这些错误。

您需要提供支持IComparable界面的Team元素的子元素。您需要获取值而不是.Elements为您提供的XElement

将结果行更改为以下内容,它将起作用。

var results = Doc.Descendants("Team").OrderByDescending(p => DateTime.Parse(p.Element("LastAccessed").Value));

答案 1 :(得分:0)

var results = Doc.Root.Descendants("Team").OrderByDescending(p =>    (DateTime)p.Element("LastAccessed"));