Vorgehensweise: Suchen nach einer Union von zwei Speicherorten (XPath-LINQ to XML) (C#)

Mit XPath können Sie nach der Union der Ergebnisse zweier XPath-Speicherortpfade suchen.

Der XPath-Ausdruck lautet:

//Category|//Price

Die gleichen Ergebnisse können Sie mit dem Concat-Standardabfrageoperator erzielen.

Beispiel

Dieses Beispiel sucht nach allen Category-Elementen und nach allen Price-Elementen und verkettet diese in einer einzelnen Auflistung. Beachten Sie, dass die LINQ to XML-Abfrage zum Sortieren der Ergebnisse InDocumentOrder aufruft. Die Reihenfolge der Ergebnisse der XPath-Ausdrucksauswertung entspricht der Reihenfolge im Dokument.

In diesem Beispiel wird das folgende XML-Dokument verwendet: Beispiel-XML-Datei: Numerische Daten (LINQ to XML).

XDocument data = XDocument.Load("Data.xml");  

// LINQ to XML query  
IEnumerable<XElement> list1 =  
    data  
    .Descendants("Category")  
    .Concat(  
        data  
        .Descendants("Price")  
    )  
    .InDocumentOrder();  

// XPath expression  
IEnumerable<XElement> list2 = data.XPathSelectElements("//Category|//Price");  

if (list1.Count() == list2.Count() &&  
        list1.Intersect(list2).Count() == list1.Count())  
    Console.WriteLine("Results are identical");  
else  
    Console.WriteLine("Results differ");  
foreach (XElement el in list1)  
    Console.WriteLine(el);  

Dieses Beispiel erzeugt die folgende Ausgabe:

Results are identical  
<Category>A</Category>  
<Price>24.50</Price>  
<Category>B</Category>  
<Price>89.99</Price>  
<Category>A</Category>  
<Price>4.95</Price>  
<Category>A</Category>  
<Price>66.00</Price>  
<Category>B</Category>  
<Price>.99</Price>  
<Category>A</Category>  
<Price>29.00</Price>  
<Category>B</Category>  
<Price>6.99</Price>  

Siehe auch

LINQ to XML für XPath-Benutzer (C#)