Condividi tramite


Query e spazi dei nomi XPath

Le query XPath tengono in considerazione gli spazi dei nomi in un documento XML e possono usare i prefissi degli spazi dei nomi per qualificare i nomi di elemento e di attributo. La qualifica dei nomi di elemento e di attributo con un prefisso dello spazio dei nomi limita i nodi restituiti da una query XPath ai soli nodi che appartengono a uno spazio dei nomi specifico.

Se ad esempio il mapping del prefisso books è lo spazio dei nomi http://www.contoso.com/books, la query XPath /books:books/books:book seguente selezionerà solo quegli elementi book nello spazio dei nomi http://www.contoso.com/books.

XmlNamespaceManager

Per usare gli spazi dei nomi in una query XPath, un oggetto derivato dall'interfaccia IXmlNamespaceResolver come la classe XmlNamespaceManager viene costruito con l'URI e il prefisso dello spazio dei nomi da includere nella query XPath.

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

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

Spazio dei nomi predefinito

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

<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, nelle query XPath possono essere usati solo i prefissi il cui mapping corrisponde a uno spazio dei nomi. Ciò significa che, se si desidera eseguire una query relativa a uno spazio dei nomi in un documento XML, anche se si tratta dello spazio dei nomi predefinito, è necessario definire un prefisso per tale spazio dei nomi.

Ad esempio, se non si definisce un prefisso per il documento XML indicato sopra, la query XPath /books/book non restituirà alcun risultato.

È necessario che sia associato un prefisso, per impedire ambiguità durante le operazioni di query su documenti con alcuni nodi che non rientrano in uno spazio dei nomi e alcuni nodi che rientrano in uno spazio dei nomi predefinito.

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

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

Vedi anche