繁体   English   中英

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

[英]How do you sort an XDocument parent node based its child?

在 C# 中,我试图使用OrderByDescendingXDocument进行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM