我正在尝试运行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 ......
答案 0 :(得分:0)
您需要更改的条件,因为您有父eventhistory
而trackingnumber
是元素result
元素,您需要调用Parent
两次
where info.Element("eventtime") != null &&
info.Parent.Parent.Element("trackingnumber").Value == TrackingNumber
答案 1 :(得分:0)
它应该是info.Parent.Parent.Element("trackingnumber")
,你应该为eventhistory的包装器提供一个单独的名称,即父项。 Result是EventHistories的父级,其元素为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>