【问题标题】:How to sort XML content by 2 Attributes in C# using Linq?如何使用 Linq 在 C# 中按 2 个属性对 XML 内容进行排序?
【发布时间】:2021-06-03 22:30:40
【问题描述】:

我是 C# 新手,想按 START 属性对内存中的 XML 进行排序,但我需要考虑到当 START_PLUSDAY 属性存在时。

这是我的 XML:

<SCHEDULE>
   <PROGS>
      <PROG START="07:00:00" END="08:00:00">
          <ID></ID>
          <DATA>...</DATA>
             <STUFF>...</STUFF>
      </PROG>
      <PROG START="01:00:00" START_PLUSDAY="1" END="02:00:00" END_PLUSDAY="1">
          <ID></ID>
          <DATA>...</DATA>
             <STUFF>...</STUFF>
      </PROG>
   </PROGS>
</SCHEDULE>

我想要的结果应该是这样的:

<SCHEDULE>
   <PROGS>
      <PROG START="07:00:00" END="08:00:00">
          <ID></ID>
          <DATA>...</DATA>
             <STUFF>...</STUFF>
      </PROG>
      <PROG START="01:00:00" START_PLUSDAY="1" END="02:00:00" END_PLUSDAY="1">
          <ID></ID>
          <DATA>...</DATA>
             <STUFF>...</STUFF>
      </PROG>
   </PROGS>
</SCHEDULE>

【问题讨论】:

    标签: c# xml sorting linq-to-xml


    【解决方案1】:

    尝试以下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Linq;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            const string FILENAME = @"c:\temp\test.xml";
            static void Main(string[] args)
            {
                XDocument doc = XDocument.Load(FILENAME);
    
                XElement progs = doc.Descendants("PROGS").FirstOrDefault();
    
                List<XElement> sortedProg = progs.Elements("PROG")
                    .OrderBy(x => (int?)x.Attribute("START_PLUSDAY"))
                    .ThenBy(x => (DateTime)x.Attribute("START")).ToList();
                XElement newProgs = new XElement("PROGS", sortedProg);
    
                progs.ReplaceWith(newProgs);
            }
        }
    }
    

    【讨论】:

    • 太棒了。非常感谢。对于我的使用,我可以跳过 progs.ReplaceWith(newProgs);并且只需解析 foreach(newProgs.Descendants("PROGRAMME") 中的 XElement xe)。再次感谢!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2015-06-18
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    相关资源
    最近更新 更多