Delen via


XPath-query's en -naamruimten

XPath-query's zijn op de hoogte van naamruimten in een XML-document en kunnen naamruimtevoorvoegsels gebruiken om element- en kenmerknamen in aanmerking te komen. Het kwalificeren van element- en kenmerknamen met een naamruimtevoorvoegsel beperkt de knooppunten die worden geretourneerd door een XPath-query tot alleen de knooppunten die deel uitmaken van een specifieke naamruimte.

Als het voorvoegsel books bijvoorbeeld wordt toegewezen aan de naamruimte http://www.contoso.com/books, selecteert de volgende XPath-query /books:books/books:book alleen die book elementen in de naamruimte http://www.contoso.com/books.

De XmlNamespaceManager

Als u naamruimten in een XPath-query wilt gebruiken, wordt een object dat is afgeleid van de IXmlNamespaceResolver interface, zoals de XmlNamespaceManager klasse, samengesteld met de naamruimte-URI en het voorvoegsel dat moet worden opgenomen in de XPath-query.

Het XmlNamespaceManager object kan op de volgende manieren in de query worden gebruikt.

Hier volgen de methoden van de XPathNavigator klasse die een object accepteren dat is afgeleid van de IXmlNamespaceResolver interface als parameter.

De standaardnaamruimte

In het VOLGENDE XML-document wordt de standaardnaamruimte met een leeg voorvoegsel gebruikt om de http://www.contoso.com/books naamruimte te declareren.

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

XPath behandelt het lege voorvoegsel als de null naamruimte. Met andere woorden, alleen voorvoegsels die zijn toegewezen aan naamruimten kunnen worden gebruikt in XPath-query's. Dit betekent dat als u een query wilt uitvoeren op een naamruimte in een XML-document, zelfs als dit de standaardnaamruimte is, u hiervoor een voorvoegsel moet definiƫren.

Als u bijvoorbeeld geen voorvoegsel voor het bovenstaande XML-document definieert, retourneert de XPath-query /books/book geen resultaten.

Een voorvoegsel moet worden gebonden om dubbelzinnigheid te voorkomen bij het opvragen van documenten met sommige knooppunten die zich niet in een naamruimte bevinden en sommige in een standaardnaamruimte.

De volgende code definieert een voorvoegsel voor de standaardnaamruimte en selecteert alle book elementen in de http://www.contoso.com/books naamruimte.

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", "http://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", "http://www.contoso.com/books");  
query.SetContext(manager);  
XPathNodeIterator nodes = navigator.Select(query);  

Zie ook