[英]Sorting xml using linq, but getting a null error?
嘗試根據時間字段對XML文件進行排序(最早的時間)... xml的片段在這里:(我要訂購的元素是TimeEventStart)
<Bookings>
<Data>
<BookingDate>2015-03-02T00:00:00</BookingDate>
<StartBookingDate>2015-03-02T00:00:00</StartBookingDate>
<RoomDescription>The room</RoomDescription>
<TimeEventStart>6:00 PM</TimeEventStart>
<TimeEventEnd>2015-03-02T20:00:00</TimeEventEnd>
<GroupName>Group Council</GroupName>
<EventName>Some cool event</EventName>
<SetupTypeDescription>SPECIAL</SetupTypeDescription>
<SetupCount>30</SetupCount>
<ReservationID>64352</ReservationID>
<EventCoordinator>ERS</EventCoordinator>
<GroupID>124151</GroupID>
<VIP xml:space="preserve"> </VIP>
<VIPEvent>false</VIPEvent>
<ClosedAllDay>false</ClosedAllDay>
....
</Data>
<Data>
.... more like above ...
</Data>
</Bookings>
首先,我使用以前的答案作為指導:
static void SortFeed(String resMain)
{
XDocument xmlSorted = XDocument.Parse(resMain);
foreach (var trans in xmlSorted.Descendants("Data"))
{
trans.ReplaceAll(trans.Elements().OrderBy(x => DateTime.Parse(x.Element("TimeEventStart").Value)).ToArray());
}
string newXml = xmlSorted.ToString();
Console.WriteLine("Done:");
Console.WriteLine(newXml);
}
這會運行,但會導致錯誤
DateTime.Parse(x.Element("TimeEventStart").Value)
錯誤是未處理的nullreference異常。
我想我知道發生了什么,它希望在TimeEventStart上進行排序,但是正在尋找其他東西,我認為這只會在找到該元素時對其進行排序,我一定會弄錯。 沒有使用Linq的經驗(而且似乎在處理xml文件),我很好奇我丟失了哪一部分,或者也許我是在錯誤的地方開始解析的? (。后裔?)
您進入的層次太深了trans
已經是一個Data
元素,然后要在 Data
TimeEventStart
元素中的一個TimeEventStart
元素對這些元素進行排序...並且該元素不存在,因為TimeEventStart
是Data
的直接元素。 我懷疑您想退出foreach
循環:
var doc = XDocument.Parse(resMain);
var root = xmlSorted.Root;
var sortedData = root.Elements
.OrderBy(data => DateTime.Parse(data.Element("DateTimeStart").Value))
.ToArray();
root.ReplaceAll(sortedData);
但是,由於DateTimeStart
的值,您可能仍然有問題-您只有6:00 PM
,這對我來說似乎不是日期/時間。 DateTimeEnd
值看起來像是正確的ISO-8601日期/時間...實際上,您可以將這樣的XElement
為DateTime
,例如
var sortedData = root.Elements
.OrderBy(data => (DateTime) data.Element("DateTimeEnd"))
.ToArray();
...但這顯然是從頭開始而不是從頭開始的順序。 如果這確實是您的數據的樣子,並且您確實想按其排序,則您需要考慮一下它的實際含義,因為它不是日期和時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.