Vorgehensweise: Ermitteln von vorhergehenden gleichgeordneten Elementen (XPath-LINQ to XML) (C#)How to: Find Preceding Siblings (XPath-LINQ to XML) (C#)

In diesem Thema wird die XPath-preceding-sibling-Achse mit der untergeordneten LINQ to XML-XNode.ElementsBeforeSelf-Achse verglichen.This topic compares the XPath preceding-sibling axis to the LINQ to XML child XNode.ElementsBeforeSelf axis.

Der XPath-Ausdruck lautet:The XPath expression is:

preceding-sibling::*

Die Ergebnisse von XPathSelectElements und von XNode.ElementsBeforeSelf werden in der Reihenfolge ausgegeben, in der sie auch im Dokument auftreten.Note that the results of both XPathSelectElements and XNode.ElementsBeforeSelf are in document order.

BeispielExample

Im folgenden Beispiel wird das FullAddress-Element ermittelt, woraufhin mit der preceding-sibling-Achse die vorhergehenden Elemente abgerufen werden.The following example finds the FullAddress element, and then retrieves the previous elements using the preceding-sibling axis.

In diesem Beispiel wird das folgende XML-Dokument verwendet: Beispiel-XML-Datei: Kunden und Bestellungen (LINQ to XML).This example uses the following XML document: Sample XML File: Customers and Orders (LINQ to XML).

XElement co = XElement.Load("CustomersOrders.xml");  

XElement add = co.Element("Customers").Element("Customer").Element("FullAddress");  

// LINQ to XML query  
IEnumerable<XElement> list1 = add.ElementsBeforeSelf();  

// XPath expression  
IEnumerable<XElement> list2 = add.XPathSelectElements("preceding-sibling::*");  

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 list2)  
    Console.WriteLine(el);  

Dieses Beispiel erzeugt die folgende Ausgabe:This example produces the following output:

Results are identical  
<CompanyName>Great Lakes Food Market</CompanyName>  
<ContactName>Howard Snyder</ContactName>  
<ContactTitle>Marketing Manager</ContactTitle>  
<Phone>(503) 555-7555</Phone>  

Siehe auchSee Also

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