C # Linq findind данные на основе предыдущего узла - PullRequest
1 голос
/ 13 июля 2010

Используя linq xml в c #, как мне извлечь для данного предшественника SetSeg с определенным значением в

Например, seatseg num = 10, следующее назначение Seat loc = ??

<top> 
 <SeatSeg>
                  <Num>9</Num>
  </SeatSeg>
  <SeatAssignment>
                  <Loc>032A</Loc>
  </SeatAssignment>
  <SeatSeg>
                  <Num>10</Num>
  </SeatSeg>
  <SeatAssignment>
                  <Loc>033A</Loc>
  </SeatAssignment>
</top>

1 Ответ

1 голос
/ 13 июля 2010

Я запустил это, и он выдает 032A.

string xml = "<top><SeatSeg><Num>9</Num></SeatSeg><SeatAssignment><Loc>032A</Loc></SeatAssignment><SeatSeg><Num>10</Num></SeatSeg><SeatAssignment><Loc>033A</Loc></SeatAssignment></top>";
int seatNum = 10;
XDocument xDoc = XDocument.Parse(xml);

string seatLoc = (from seatSeg in xDoc.Element("top").Elements("SeatSeg")
                  where seatSeg.Element("Num").Value == seatNum.ToString() 
                  select seatSeg
                 ).Single().ElementsBeforeSelf().Last().Element("Loc").Value;

Console.WriteLine(seatLoc);

Однако, глядя на xml, кажется, что следующее, которое выводит 033A, - то, что вы хотитеElementsBeforeSelf () будет тянуть всех предшествующих братьев и сестер.Last () получит последний из последовательности.

И наоборот, ElementsAfterSelf () извлечет всех последующих братьев и сестер.First () получит первый из последовательности.

...