Sdílet prostřednictvím


XPath-Abfragen und Namespaces

Aktualisiert: November 2007

XPath-Abfragen unterstützen Namespaces in einem XML-Dokument und können Namespacepräfixe zum Kennzeichnen von Element- und Attributnamen verwenden. Durch das Kennzeichnen von Element- und Attributnamen mit einem Namespacepräfix wird die Anzahl der von einer XPath-Abfrage zurückgegebenen Knoten auf die Knoten beschränkt, die zu einem bestimmten Namespace gehören.

Wenn z. B. das Präfix books dem Namespace https://www.contoso.com/books zugeordnet ist, wählt die folgende XPath-Abfrage /books:books/books:book nur die book-Elemente im Namespace https://www.contoso.com/books aus.

Der XmlNamespaceManager

Um Namespaces in einer XPath-Abfrage zu verwenden, wird ein von der IXmlNamespaceResolver-Schnittstelle abgeleitetes Objekt wie die XmlNamespaceManager-Klasse mit dem Namespace-URI und -präfix erstellt, die in die XPath-Abfrage eingefügt werden sollen.

Das XmlNamespaceManager-Objekt kann in der Abfrage auf eine der folgenden Arten verwendet werden:

Im Folgenden finden Sie eine Auflistung der Methoden der XPathNavigator-Klasse, die ein von der IXmlNamespaceResolver-Schnittstelle abgeleitetes Objekt als Parameter akzeptieren.

Der Standardnamespace

Im folgenden XML-Dokument wird der Standardnamespace mit einem leeren Präfix für die Deklaration des https://www.contoso.com/books-Namespaces verwendet.

<books xmlns=”http://www.example.com/books”>
    <book>
        <title>Title</title>
        <author>Author Name</title>
        <price>5.50</price>
    </book>
</books>

XPath behandelt das leere Präfix als null-Namespace. Mit anderen Worten: In XPath-Abfragen können nur Präfixe verwendet werden, die Namespaces zugeordnet sind. Das bedeutet, dass Sie ein Präfix definieren müssen, wenn Sie einen Namespace in einem XML-Dokument abfragen möchten, auch wenn es sich um den Standardnamespace handelt.

Ohne die Definition eines Präfixes für das obige XML-Dokument gibt z. B. die XPath-Abfrage /books/book kein Ergebnis zurück.

Ein Präfix muss gebunden sein, um Mehrdeutigkeit beim Abfragen von Dokumenten zu vermeiden, die einige Knoten außerhalb der Namespaces sowie einige Knoten in einem Standardnamespace enthalten.

Im folgenden Code wird ein Präfix für den Standardnamespace definiert, und alle book-Elemente aus dem https://www.contoso.com/books-Namespace werden ausgewählt.

Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
Dim query As XPathExpression = navigator.Compile("/books:books/books:book")
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(navigator.NameTable)
manager.AddNamespace("books", "https://www.contoso.com/books")
query.SetContext(manager)
Dim nodes As XPathNodeIterator = navigator.Select(query)
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();
XPathExpression query = navigator.Compile("/books:books/books:book");
XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
manager.AddNamespace("books", "https://www.contoso.com/books");
query.SetContext(manager);
XPathNodeIterator nodes = navigator.Select(query);

Siehe auch

Konzepte

Verarbeiten von XML-Daten mithilfe des XPath-Datenmodells

Auswählen von XML-Daten mit 'XPathNavigator'

Auswerten von XPath-Ausdrücken mit "XPathNavigator"

Vergleich von Knoten mit "XPathNavigator"

In XPath-Abfragen erkannte Knotentypen

Kompilierte XPath-Ausdrücke

Referenz

XmlDocument

XPathDocument

XPathNavigator