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.
L'oggetto XmlNamespaceManager viene associato a un oggetto XPathExpression esistente mediante il metodo SetContext dell'oggetto XPathExpression.È anche possibile compilare un nuovo oggetto XPathExpression utilizzando il metodo statico Compile, che accetta una stringa che rappresenta l'espressione XPath e un oggetto XmlNamespaceManager come parametri e restituisce un nuovo oggetto XPathExpression.
Lo stesso oggetto XmlNamespaceManager viene passato come parametro a un metodo della classe XPathNavigator che lo accetti assieme a una stringa che rappresenta l'espressione XPath.
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
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