[英]How do you sort an XDocument parent node based its child?
在 C# 中,我试图使用OrderByDescending
对XDocument
进行OrderByDescending
。 目标是读取包含日期/时间戳的子节点之一并重新排序父节点。
我从保存的文件中加载 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>
我想根据子元素<LastAccessed>
降序重新排序<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 父节点进行排序?
你应该得到一个错误,说:
至少一个对象必须实现 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"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.