Condividi tramite


Query e spazi dei nomi XPath

Le query XPath sono consapevoli degli spazi dei nomi in un documento XML e possono usare prefissi dello spazio dei nomi per qualificare i nomi di elementi e attributi. Qualificare i nomi di elementi e attributi con un prefisso dello spazio dei nomi limita i nodi restituiti da una query XPath solo a quei nodi appartenenti a uno spazio dei nomi specifico.

Ad esempio, se il prefisso books esegue il mapping allo spazio dei nomi http://www.contoso.com/books, la query /books:books/books:book XPath seguente seleziona solo gli book elementi nello spazio dei nomi http://www.contoso.com/books.

The XmlNamespaceManager

Per usare i namespace in una query XPath, un oggetto derivato dall'interfaccia IXmlNamespaceResolver come la classe XmlNamespaceManager viene costruito con l'URI del namespace e il prefisso da includere nella query XPath.

L'oggetto XmlNamespaceManager può essere usato nella query in ognuno dei modi seguenti.

Di seguito sono riportati i metodi della XPathNavigator classe che accettano un oggetto derivato dall'interfaccia IXmlNamespaceResolver come parametro.

Spazio dei nomi predefinito

Nel documento XML che segue, lo spazio dei nomi predefinito con un prefisso vuoto viene usato per dichiarare lo http://www.contoso.com/books spazio dei nomi.

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

XPath considera il prefisso vuoto come lo spazio dei nomi null. In altre parole, solo i prefissi mappati ai namespace possono essere usati nelle query XPath. Ciò significa che se si desidera eseguire una query su uno spazio dei nomi in un documento XML, anche se si tratta dello spazio dei nomi predefinito, è necessario definire un prefisso per esso.

Ad esempio, senza definire un prefisso per il documento XML precedente, la query /books/book XPath non restituirà alcun risultato.

Un prefisso deve essere associato per evitare ambiguità durante l'esecuzione di query su documenti con alcuni nodi non in uno spazio dei nomi e alcuni in uno spazio dei nomi predefinito.

Il codice seguente definisce un prefisso per lo spazio dei nomi predefinito e seleziona tutti gli book elementi dello http://www.contoso.com/books spazio dei nomi.

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);  

Vedere anche