Suchen nach Attributen von nebengeordneten Elementen mit einem bestimmten Namen (LINQ to XML)
In diesem Artikel wird gezeigt, wie Sie XPathEvaluate verwenden können, um jedes Attribut zu finden, das einen bestimmten Namen hat und auch zu einem gleichgeordneten Element des Kontextknotens gehört. Im Artikel wird auch gezeigt, wie Sie eine LINQ to XML-Abfrage für dieselbe Aufgabe verwenden.
Beispiel: Suchen aller gleichgeordneten Elemente mit dem Namen Book
und anschließendes Suchen aller Attribute namens id
In diesem Beispiel wird ein Book
-Element im XML-Dokument Beispiel-XML-Datei: Bücher gefunden. Anschließend werden alle gleichgeordneten Elemente mit dem Namen Book
und alle Attribute namens id
dieser Elemente gefunden. Das Ergebnis ist eine Auflistung von Attributen.
Der XPath-Ausdruck lautet ../Book/@id
.
XDocument books = XDocument.Load("Books.xml");
XElement book =
books
.Root
.Element("Book");
// LINQ to XML query
IEnumerable<XAttribute> list1 =
from el in book.Parent.Elements("Book")
select el.Attribute("id");
// XPath expression
IEnumerable<XAttribute> list2 =
((IEnumerable)book.XPathEvaluate("../Book/@id")).Cast<XAttribute>();
if (list1.Count() == list2.Count() &&
list1.Intersect(list2).Count() == list1.Count())
Console.WriteLine("Results are identical");
else
Console.WriteLine("Results differ");
foreach (XAttribute el in list1)
Console.WriteLine(el);
Dim books as XDocument = XDocument.Load("Books.xml")
Dim book As XElement = books.Root.<Book>(0)
' LINQ to XML query
Dim list1 As IEnumerable(Of XAttribute) = _
From el In book.Parent.<Book> _
Select el.Attribute("id")
' XPath expression
Dim list2 As IEnumerable(Of XAttribute) = DirectCast(book. _
XPathEvaluate("../Book/@id"), IEnumerable).Cast(Of XAttribute)()
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 XAttribute In list1
Console.WriteLine(el)
Next
Dieses Beispiel erzeugt die folgende Ausgabe:
Results are identical
id="bk101"
id="bk102"
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