Condividi tramite


Query e spazi dei nomi XPath

Le query XPath tengono in considerazione gli spazi dei nomi in un documento XML e possono utilizzare 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 https://www.contoso.com/books, la query XPath /books:books/books:book seguente selezionerà solo quegli elementi book nello spazio dei nomi https://www.contoso.com/books.

XmlNamespaceManager

Per utilizzare 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 utilizzato 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 utilizzato per dichiarare lo spazio dei nomi https://www.contoso.com/books.

<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.In altre parole, nelle query XPath possono essere utilizzati 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 https://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", "https://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", "https://www.contoso.com/books");
query.SetContext(manager);
XPathNodeIterator nodes = navigator.Select(query);

Vedere anche

Riferimenti

XmlDocument

XPathDocument

XPathNavigator

Concetti

Elaborazione di dati XML con il modello di dati XPath

Selezione di dati XML con XPathNavigator

Valutazione di espressioni XPath con XPathNavigator

Corrispondenza di nodi utilizzando XPathNavigator

Tipi di nodo riconosciuti con le query XPath

Espressioni XPath compilate