如何基于XDocument的子节点对其父节点进行排序

本文关键字:父节点 排序 何基于 XDocument 子节点 | 更新日期: 2023-09-27 18:13:27

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

我从保存的文件中加载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>

我想重新排序<Team>降序基于子元素<LastAccessed>

我尝试了以下方法,但没有成功:

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父节点进行排序?

如何基于XDocument的子节点对其父节点进行排序

你应该得到一个错误说:

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

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

您需要提供一个支持IComparable接口的Team元素的子元素。您需要获得值,而不是.Elements提供给您的XElement

把你的结果行改成下面的行就可以了。

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