0

我正在尝试运行 LINQ - XML 查询来获取特定 XML 文件的后代。

我有多个元素,我需要从中选择具有特定跟踪号的结果并显示事件历史记录。

XML 文件:

    <result>
      <trackingnumber>31343</trackingnumber>
      <source>post</source>
      <eventhistory>
        <eventhistory>
          <eventdate>21/10/11</eventdate>
          <eventtime>06.48 PM</eventtime>
          <location>tauranga</location>
        </eventhistory>
        <eventhistory>
          <eventdate>21/10/11</eventdate>
          <eventtime>06.48 PM</eventtime>
          <location>tauranga</location>
        </eventhistory>
        <eventhistory>
          <eventdate>21/10/11</eventdate>
          <eventtime>06.48 PM</eventtime>
          <location>tauranga</location>
        </eventhistory>
      </eventhistory>
    </result>

我当前的代码:

    IEnumerable<TrackData> data = from info in xdoc.Descendants("eventhistory")
                                  where     info.Element("eventtime") != null &&
                                            info.Parent.Element("trackingnumber").Value == TrackingNumber
                                  select

                                      new TrackData()
                                      {
                                          EventTime = (string)info.Element("eventtime") ?? "No Time Info",
                                          EventDate = (string)info.Element("eventdate") ?? "No Date Info"


                                      };

我哪里错了?我有点理解我可能不应该先找到后代然后检查另一个元素是否有正确的跟踪号,但我不确定我将如何解决它。

此外,是否有某种 LINQ XML 圣经可以在未来给我一个很好的指导?我似乎一直被困在 LINQ XML 上......

4

2 回答 2

0

您的 where 条件需要更改,因为您有父级eventhistory并且trackingnumber是 Element of resultelement 您需要调用Parent两次

where     info.Element("eventtime") != null &&
          info.Parent.Parent.Element("trackingnumber").Value == TrackingNumber
于 2013-10-09T02:37:51.510 回答
0

它应该是info.Parent.Parent.Element("trackingnumber"),并且您应该为 eventhistory 的包装器指定一个单独的名称,即父级。Result 是 EventHistory 的父级,并具有元素 TrackingNumber

<eventhistories>
        <eventhistory>
          <eventdate>21/10/11</eventdate>
          <eventtime>06.48 PM</eventtime>
          <location>tauranga</location>
        </eventhistory>
        <eventhistory>
      <eventdate>21/10/11</eventdate>
      <eventtime>06.48 PM</eventtime>
      <location>tauranga</location>
    </eventhistory>
    <eventhistory>
      <eventdate>21/10/11</eventdate>
      <eventtime>06.48 PM</eventtime>
      <location>tauranga</location>
    </eventhistory>
 </eventhistories>
于 2013-10-09T02:38:30.237 回答