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.
Het XmlNamespaceManager object is gekoppeld aan een bestaand XPathExpression object met behulp van de SetContext methode van het XPathExpression object. U kunt ook een nieuw XPathExpression object compileren met behulp van de statische Compile methode die een tekenreeks gebruikt die de XPath-expressie en een XmlNamespaceManager object als parameters vertegenwoordigt en een nieuw XPathExpression object retourneert.
Het XmlNamespaceManager object zelf wordt doorgegeven als een parameter aan een accepterende XPathNavigator klassemethode, samen met een tekenreeks die de XPath-expressie vertegenwoordigt.
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
- XmlDocument
- XPathDocument
- XPathNavigator
- XML-gegevens verwerken met behulp van het XPath-gegevensmodel
- XML-gegevens selecteren met XPathNavigator
- XPath-expressies evalueren met XPathNavigator
- Overeenkomende knooppunten met XPathNavigator
- Knooppunttypen herkend met XPath-query's
- Gecompileerde XPath-expressies