So finden Sie vorherige gleichgeordnete Elemente (LINQ to XML)
In diesem Artikel erfahren Sie, wie Sie entlang der vorangehenden gleichgeordneten Achse XPathSelectElements verwenden, um gleichgeordnete Elemente zu finden, die einem bestimmten Element vorangehen, und wie Sie XNode.ElementsBeforeSelfverwenden, um die gleichen Elemente zu finden.
Beispiel: Verwenden sie zwei Methoden, um gleichgeordnete Elemente zu finden, die einem Element vorausgehen
Im folgenden Beispiel wird das FullAddress
-Element im XML-Dokument "Beispiel-XML-Datei: Customers" und "orders" gefunden, und die vorhergehenden gleichgeordneten Elemente werden auf zwei verschiedene Arten abgerufen. Anschließend werden die Ergebnisse verglichen und für identisch befunden.
Hinweis
Beide Methoden stellen Ergebnisse bereit, die sich in der Dokumentreihenfolge befinden.
Der verwendete XPath-Ausdruck ist preceding-sibling::*
.
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);
Dim co As XElement = XElement.Load("CustomersOrders.xml")
Dim add As XElement = co.<Customers>.<Customer>. _
<FullAddress>.FirstOrDefault
' LINQ to XML query
Dim list1 As IEnumerable(Of XElement) = add.ElementsBeforeSelf()
' XPath expression
Dim list2 As IEnumerable(Of XElement) = add.XPathSelectElements("preceding-sibling::*")
If list1.Count() = list2.Count() And _
list1.Intersect(list2).Count() = list1.Count() Then
Console.WriteLine("Results are identical")
Else
Console.WriteLine("Results differ")
End If
For Each el As XElement In list2
Console.WriteLine(el)
Next
Dieses Beispiel erzeugt die folgende Ausgabe:
Results are identical
<CompanyName>Great Lakes Food Market</CompanyName>
<ContactName>Howard Snyder</ContactName>
<ContactTitle>Marketing Manager</ContactTitle>
<Phone>(503) 555-7555</Phone>
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für