2017-06-21 5 views
3

Ich habe den folgenden Code, der dynamisch alle eindeutigen Elementnamen auswählt; Ich möchte auch die Werte für diese Elemente sehen. Wie kann ich dies mit LINQ tun? Ich bin offen dafür, es auch anders zu machen.Alle XML-Elemente und ihre Werte dynamisch mit LINQ auswählen

XDocument doc = XDocument.Load("XMLFile1.xml"); 
foreach (var name in doc.Descendants("QueryResults").Elements() 
       .Select(x => x.Name).Distinct()) 
{ 
} 

Antwort

1

So etwas wie dies funktionieren würde

XDocument doc = XDocument.Load("XMLFile1.xml"); 
    foreach (var name in doc.Descendants("QueryResults").Elements() 
       .Select(x => new {Name = x.Name, Value = e.Value}).Distinct()) 
    { 


    } 
+0

Das funktionierte wie ein Charme. Vielen Dank! –

0

Sie würden nur name.Value verwenden, die eine String-Eigenschaft von XElement ist.

1

Die akzeptierte Abfrage Differnt ist dann das Original, weil sie sich ändert, wie Distinct funktioniert, weil es keine vergleicht mehr nur Name sondern auch Value. Wenn Sie sehen möchten, welche Namen welche Werte haben, müssen Sie GroupBy auf dem Name verwenden und die Value für jedes Element erhalten.

var results = 
    doc 
     .Descendants("QueryResults") 
     .Elements() 
     .GroupBy(x => x.Name, (name, items) => new 
     { 
      Name = name, 
      Values = items.Select(x => x.Value) 
     }); 
Verwandte Themen