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

标签 c# xml linq linq-to-xml

在 C# 中,我试图对 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>

我想重新订购 <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 父节点进行排序吗?

最佳答案

你应该得到一个错误说:

At least one object must implement IComparable.

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

您需要提供支持 IComparableTeam 元素的子元素界面。您需要获取 .Elements 的值而不是 XElement给你。

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

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

关于c# - 如何根据子节点对 XDocument 父节点进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16552057/

相关文章:

LINQ 动态表达式 API,与 DBNull.Value 比较的谓词

c# - 接口(interface)中的静态

c# - Marshal.SizeOf(typeof(IntPtr)) 与 sizeof(IntPtr)

c# - .NET Web 服务 - 如何返回错误?

c# - Xamarin 需要引用 Windows.Foundation.FoundationContract

android - 如何在 Android 的 textinputLayout 中设置 * in hint

xml - 如何停止 Eclipse XML 格式化程序将文本放在新行上?

c# - 为什么 Linq Cast<> 助手不能与隐式转换运算符一起使用?

xml - Apache Ant 不会做数学运算

c# - 使用 Linq 从不包括特定成员列表的集合中选择项目的优化方法