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

親がeventhistoryあり、trackingnumber要素の要素であるため、場所条件を変更する必要があります。2回result呼び出す必要があります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 は 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>
于 2013-10-09T02:38:30.237 に答える