簡體   English   中英

使用linq對xml進行排序,但出現空錯誤?

[英]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元素對這些元素進行排序...並且該元素不存在,因為TimeEventStartData的直接元素。 我懷疑您想退出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日期/時間...實際上,您可以將這樣的XElementDateTime ,例如

var sortedData = root.Elements
                     .OrderBy(data => (DateTime) data.Element("DateTimeEnd"))
                     .ToArray();

...但這顯然是從頭開始而不是從頭開始的順序。 如果這確實是您的數據的樣子,並且您確實想按其排序,則您需要考慮一下它的實際含義,因為它不是日期和時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM