在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父节点进行排序的任何建议吗?
答案 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"));