Navigazione dei nodi di attributi e dello spazio dei nomi con XPathNavigator

La classe XPathNavigator offre due set di metodi di navigazione. Il primo set, che si trova nell'argomento Navigazione del set di nodi con XPathNavigator, consente di navigare nei set di nodi di un oggetto XPathDocument o XmlDocument. Il secondo set, descritto in questo argomento, consente di navigare nei nodi di attributi e dello spazio dei nomi di un oggetto XPathDocument o XmlDocument.

Navigazione di nodi di attributi

Gli attributi sono proprietà di un elemento, non elementi figlio dell'elemento. Questa distinzione è importante, a causa dei metodi della classe XPathNavigator usati per esplorare i nodi di pari livello, padre e figlio.

Ad esempio, per spostarsi da un elemento a un attributo o tra più attributi non vengono usati i metodi MoveToPrevious e MoveToNext. Infatti gli attributi dispongono di metodi di navigazione distinti.

Di seguito sono riportati i metodi di navigazione degli attributi della classe XPathNavigator.

Quando il nodo corrente è un elemento, è possibile usare la proprietà HasAttributes per verificare la presenza di eventuali attributi associati all'elemento. Una volta appurato che l'elemento dispone di attributi, sono disponibili diversi metodi per accedere agli attributi. Per rimuovere un singolo attributo dall'elemento, usare il metodo GetAttribute. Per spostare l'oggetto XPathNavigator su un attributo specifico, usare il metodo MoveToAttribute. È inoltre possibile scorrere ogni attributo di un elemento usando il metodo MoveToFirstAttribute seguito da più chiamate al metodo MoveToNextAttribute.

Nota

Quando l'oggetto XPathNavigator è posizionato in corrispondenza di un nodo di attributo o dello spazio dei nomi, i metodi MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext e MoveToPrevious restituiscono sempre false e non influiscono sulla posizione dell'oggetto XPathNavigator. Eccezioni sono rappresentate dai metodi MoveTo, MoveToParent e MoveToRoot.

Navigazione di nodi dello spazio dei nomi

A ciascun elemento è associato un set di nodi dello spazio dei nomi, uno per ogni singolo prefisso dello spazio dei nomi associato a un URI dello spazio dei nomi nell'ambito per l'elemento (incluso il prefisso XML associato allo spazio dei nomi http://www.w3.org/XML/1998/namespace e dichiarato in modo implicito in ogni documento XML) e uno per lo spazio dei nomi predefinito se è presente nell'ambito dell'elemento. L'elemento è l'elemento padre di ogni nodo dello spazio dei nomi. Tuttavia, un nodo dello spazio dei nomi non è un elemento figlio dell'elemento padre corrispondente.

Come nel caso degli attributi, per spostarsi da un elemento a un nodo dello spazio dei nomi o tra più nodi dello spazio dei nomi non vengono usati i metodi MoveToPrevious e MoveToNext. Infatti i nodi dello spazio dei nomi dispongono di metodi di navigazione distinti.

Di seguito sono riportati i metodi di navigazione dello spazio dei nomi della classe XPathNavigator.

È sempre presente almeno un nodo dello spazio dei nomi nell'ambito di ogni elemento in un documento XML. Questo è il nodo dello spazio dei nomi con il prefisso xml e l'URI dello spazio dei nomi http://www.w3.org/XML/1998/namespace. Per recuperare un URI dello spazio dei nomi nell'ambito in base a un prefisso specifico, usare il metodo GetNamespace. Per spostare l'oggetto XPathNavigator su un nodo specifico dello spazio dei nomi, usare il metodo MoveToNamespace. È inoltre possibile scorrere ogni nodo dello spazio dei nomi di un elemento usando il metodo MoveToFirstNamespace seguito da più chiamate al metodo MoveToNextNamespace.

Nota

Quando l'oggetto XPathNavigator è posizionato in corrispondenza di un nodo di attributo o dello spazio dei nomi, i metodi MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext e MoveToPrevious restituiscono sempre false e non influiscono sulla posizione dell'oggetto XPathNavigator. Eccezioni sono rappresentate dai metodi MoveTo, MoveToParent e MoveToRoot.

Enumerazione di XPathNamespaceScope

Durante la navigazione dei nodi dello spazio dei nomi è possibile chiamare i metodi MoveToFirstNamespace e MoveToNextNamespace con un parametro XPathNamespaceScope. Tali metodi si comportano in modo diverso rispetto alle relative controparti chiamate senza parametri. L'enumerazione XPathNamespaceScope presenta i valori All, ExcludeXml o Local.

Negli esempi seguenti viene mostrato quali spazi dei nomi vengono restituiti dai metodi MoveToFirstNamespace e MoveToNextNamespace in vari ambiti in un documento XML.

<root>  
    <element1 xmlns="http://www.contoso.com" xmlns:books="http://www.contoso.com/books">  
        <element2 />  
    </element1>  
</root>  

La sequenza di spazi dei nomi (ovvero, lo spazio dei nomi in corrispondenza del quale si trova l'oggetto XPathNavigator dopo la chiamata al metodo MoveToFirstNamespace seguita da una serie di chiamate al metodo MoveToNextNamespace) è la seguente.

  • Quando è posizionata su element2: xmlns:books="http://www.contoso.com/books", xmlns="http://www.contoso.com" e xmlns:xml="http://www.w3.org/XML/1998/namespace".

  • Quando è posizionata su element1: xmlns:books="http://www.contoso.com/books", xmlns="http://www.contoso.com" e xmlns:xml="http://www.w3.org/XML/1998/namespace".

  • Quando è posizionata su root: xmlns:xml="http://www.w3.org/XML/1998/namespace".

Nota

La classe XPathNavigator restituisce i nodi dello spazio dei nomi in ordine inverso rispetto al documento. Pertanto, il metodo MoveToFirstNamespace essenzialmente consente uno spostamento all'ultimo nodo dello spazio dei nomi nell'ambito corrente.

Negli esempi seguenti viene mostrato quali spazi dei nomi vengono restituiti dai metodi MoveToFirstNamespace e MoveToNextNamespace con l'enumerazione XPathNamespaceScope specificata in vari ambiti in un documento XML.

<root xmlns="http://www.contoso.com" xmlns:a="http://www.contoso.com/a" xmlns:b="http://www.contoso.com/b">  
    <child1 xmlns="" xmlns:a="urn:a">  
        <child2 xmlns:c="urn:c" />  
    </child1>  
</root>  

Quando è posizionata su child2, la sequenza di spazi dei nomi (ovvero, lo spazio dei nomi in corrispondenza del quale si trova l'oggetto XPathNavigator dopo la chiamata al metodo MoveToFirstNamespace seguita da una serie di chiamate al metodo MoveToNextNamespace) è la seguente.

  • All: xmlns:c="urn:c", xmlns:a="urn:a", xmlns="", xmlns:b="http://www.contoso.com/b", xmlns:a="http://www.contoso.com/a", xmlns="http://www.contoso.com" e xmlns:xml="http://www.w3.org/XML/1998/namespace".

  • ExcludeXml: xmlns:c="urn:c", xmlns:a="urn:a", xmlns="", xmlns:b="http://www.contoso.com/b", xmlns:a="http://www.contoso.com/a" e xmlns="http://www.contoso.com".

  • Local: xmlns:c="urn:c".

Nota

La classe XPathNavigator restituisce i nodi dello spazio dei nomi in ordine inverso rispetto al documento. Pertanto, il metodo MoveToFirstNamespace essenzialmente consente uno spostamento all'ultimo nodo dello spazio dei nomi nell'ambito corrente.

Vedi anche