2010-07-12 30 views
1

在c#使用LINQ XML我將如何提取用於SetSeg的一個給定的前身與C#的LINQ findind基於先前節點

一定值上的數據例​​如seatseg NUM = 10以下Seatassignment LOC =&

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

回答

1

我跑這個,它寫出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是你想要的

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().ElementsAfterSelf().First().Element("Loc").Value; 

Console.WriteLine(seatLoc); 

ElementsBeforeSelf()將會把所有前面的兄弟姐妹。 Last()將獲得序列的最後一個。

相反,ElementsAfterSelf()將拉動所有後續的兄弟姐妹。 First()將獲得序列的第一個。

+0

謝謝Rchem,你是對的第二個例子正是我所需要的! 我是新來的c#和Linq :)我可以問我是否需要擴展它來處理下面的senario如何處理它? 033A 033B 期望返回033A和033B作爲Num是10兩個。 感謝您的幫助 – 2010-07-13 12:02:52