2010-07-12 2 views
1

aide xml LINQ en C# comment pourrais-je extraire pour un prédécesseur donné SetSeg avec une certaine valeur dansC# LINQ findind les données à partir d'un noeud précédent

Ex s num = 10 la Seatassignment suivante loc = ??

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

Répondre

1

J'ai couru ceci et il écrit 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); 

Cependant, en regardant le xml, il semble que les éléments suivants qui imprime 033A est ce que vous voulez

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() va tirer tous les frères et soeurs précédents. Last() obtiendra le dernier de la séquence. Inversement, ElementsAfterSelf() va tirer tous les frères et soeurs suivants. First() obtiendra le premier de la séquence.

+0

Merci Rchem, tu avais raison le deuxième exemple était exactement ce dont j'avais besoin! Je suis nouveau sur C# et Linq :) Pourrais-je demander si je dois prolonger cela pour traiter avec le senario suivant comment pourrais-je l'aborder? 033A 033B cherche à retourner à la fois 033A et 033B que Num est 10 pour les deux. merci pour votre aide –

Questions connexes