Freigeben über


Vorgehensweise: Ermitteln von Attributen nebengeordneter Knoten mit einem bestimmten Namen (XPath-LINQ to XML)

In diesem Thema wird gezeigt, wie Sie alle Attribute der nebengeordneten Knoten des Kontextknotens ermitteln können. In der Auflistung werden nur Attribute mit einem bestimmten Namen zurückgegeben.

Der XPath-Ausdruck lautet:

../Book/@id

Beispiel

Dieses Beispiel sucht zuerst nach einem Book-Element, als Nächstes nach allen nebengeordneten Elementen mit dem Namen Book und zum Schluss nach allen Attributen mit dem Namen id. Das Ergebnis ist eine Auflistung von Attributen.

In diesem Beispiel wird das XML-Dokument in XML-Beispieldatei: Bücher ('Books') (LINQ to XML) verwendet.

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

Konzepte

LINQ to XML für XPath-Benutzer