Query e spazi dei nomi XPathXPath Queries and Namespaces

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.XPath queries are aware of namespaces in an XML document and can use namespace prefixes to qualify element and attribute names. 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.Qualifying element and attribute names with a namespace prefix limits the nodes returned by an XPath query to only those nodes that belong to a specific namespace.

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.For example if the prefix books maps to the namespace http://www.contoso.com/books, then the following XPath query /books:books/books:book selects only those book elements in the namespace http://www.contoso.com/books.

XmlNamespaceManagerThe 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.To use namespaces in an XPath query, an object derived from the IXmlNamespaceResolver interface like the XmlNamespaceManager class is constructed with the namespace URI and prefix to include in the XPath query.

L'oggetto XmlNamespaceManager può essere usato nella query in ciascuno dei seguenti modi.The XmlNamespaceManager object may be used in the query in each of the following ways.

Di seguito sono indicati i metodi della classe XPathNavigator che accettano come parametro un oggetto derivato dall'interfaccia IXmlNamespaceResolver.The following are the methods of the XPathNavigator class that accept an object derived from the IXmlNamespaceResolver interface as a parameter.

Spazio dei nomi predefinitoThe Default Namespace

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.In the XML document that follows, the default namespace with an empty prefix is used to declare the http://www.contoso.com/books namespace.

<books xmlns="http://www.example.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.XPath treats the empty prefix as the null namespace. In altre parole, nelle query XPath possono essere usati solo i prefissi il cui mapping corrisponde a uno spazio dei nomi.In other words, only prefixes mapped to namespaces can be used in XPath queries. 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.This means that if you want to query against a namespace in an XML document, even if it is the default namespace, you need to define a prefix for it.

Ad esempio, se non si definisce un prefisso per il documento XML indicato sopra, la query XPath /books/book non restituirà alcun risultato.For example, without defining a prefix for the XML document above, the XPath query /books/book would not return any results.

È 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.A prefix must be bound to prevent ambiguity when querying documents with some nodes not in a namespace, and some in a default namespace.

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.The following code defines a prefix for the default namespace and selects all the book elements from the http://www.contoso.com/books namespace.

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 ancheSee Also

XmlDocument
XPathDocument
XPathNavigator
Elaborazione di dati XML con il modello di dati XPathProcess XML Data Using the XPath Data Model
Selezionare dati XML con XPathNavigatorSelect XML Data Using XPathNavigator
Valutare espressioni XPath con XPathNavigatorEvaluate XPath Expressions using XPathNavigator
Corrispondenza di nodi con XPathNavigatorMatching Nodes using XPathNavigator
Tipi di nodo riconosciuti con le query XPathNode Types Recognized with XPath Queries
Espressioni XPath compilateCompiled XPath Expressions