2016-05-22 16 views
0

Ich habe unter XML-Datei.Abrufen von Werten aus XML mit Linq Query

<Root> 
    <r1> 
    <n1>Person1</n1> 
    <n2>Type1</n2> 
    </r1> 
    <r1> 
    <n1>Person1</n1> 
    <n2>Type2</n2> 
    </r1> 
    <r1> 
    <n1>Person2</n1> 
    <n2>Type2</n2> 
    </r1> 
    <r1> 
    <n1>Person2</n1> 
    <n2>Type3</n2> 
    </r1> 
    <r1> 
    <n1>Person2</n1> 
    <n2>Type4</n2> 
    </r1> 
    <r1> 
    <n1>Person2</n1> 
    <n2>Type4</n2> 
    </r1> 
</Root> 

Was ich will ist, um Typen basierend auf Personen zu bekommen. Zum Beispiel habe ich versucht unten Abfrage erwartet Typ1 und Typ2 Werte für Person1, aber es hat nicht funktioniert.

XDocument doc = XDocument.Parse(XML_Document); 

XElement[] pages = doc 
    .Descendants("r1") 
    .OrderBy(x => x.FirstNode.Value=="person1") 
    .ToArray(); 

Welche Abfrage sollte ich verwenden, um es zu bekommen? Oder gibt es eine bessere Möglichkeit, mit XML-Dokumenten in asp.net C# umzugehen?

+1

Ich denke, Sie sollten Ihre 'OrderBy' von' GroupBy (x ersetzen => x.FirstNode.Value) ' –

+0

Ich habe gerade festgestellt, dass ich orderby dort verwendet habe :) Ich habe es in groupby geändert, aber es funktioniert immer noch nicht. es heißt (Operator == kann nicht auf Operanden vom Typ Methodengruppe und String angewendet werden) – Yavuz

Antwort

2

können Sie Where() verwenden r1 von n1 Kind Elementwert zu filtern, und dann Select() verwenden Sie den entsprechenden n2 Element Wert zurückgeben:

string[] types = doc.Descendants("r1") 
        .Where(x => (string)x.Element("n1") == "person1") 
        .Select(x => (string)x.Element("n2")) 
        .ToArray(); 

Und Distinct() nach Select() hinzufügen, wenn Sie explizit doppelte Werte entfernen möchten. mit

2

Versuchen Sie, wo Aussage wie, unter dem Sie zwei XElements würde

 XElement[] pages = doc.Descendants("r1") 
           .Where(x => x.Element("n1").Value == "Person1") 
           .ToArray(); 
1

Versuchen Sie den folgenden Code zu verwenden:

var pages = doc. 
      Descendants("r1"). 
      Where(r1 => r1.Element("n1").Value == "person1"). 
      Select(r1 => r1.Element("n2").Value). 
      ToArray(); 
Verwandte Themen