如何使用 Linq 在 C# 中按 2 个属性对 XML 内容进行排序?
How to sort XML content by 2 Attributes in C# using Linq?
我是 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>
尝试以下操作:
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);
}
}
}
我是 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>
尝试以下操作:
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);
}
}
}