Wir nutzen einen Webdienst eines Drittanbieters, der XML zurückgibt, das ungefähr so aussieht (aus Gründen der Kürze gekürzt):
L
MRDEN
G
1235
-u@surfuk1
1236
-u@surfuk2
1237
-u@surfuk3
Für einen bestimmten Produktcode muss ich den realm
-Namen erhalten, d.h. den inneren Text von:
-u@surfuk2
Weil jeder Elementname entweder oder ist, ist es etwas umständlich mit Linq to XML oder Abfrageausdrücken zu parsen.
Ist der folgende Weg der effektivste/effizienteste/ausdrucksstärkste Weg, um den Realnamen für ein bestimmtes Produkt, z.B. 1235, zu erhalten:
List products = response
.Element("Response")
.Elements("block")
.Where(x => x.Attribute("name").Value == "products")
.Elements("block").ToList();
//
// Ich habe die Abfrage aufgeteilt, um die Lesbarkeit zu erleichtern
//
string realm = products.Elements("a")
.Where(x => x.Attribute("name").Value == "product-id")
.Where(y => y.Value == "1235") // für beispielhafte Verwendung fest codiert
.Ancestors()
.First()
.Elements("block")
.Where(z => z.Attribute("name").Value == "realms")
.Elements("block")
.Elements("a")
.First().Value;