Navegación por nodos de espacios de nombres y atributos con XPathNavigator

La clase XPathNavigator incluye dos conjuntos de métodos de navegación. El primero, que se encuentra en el tema Navegación por un conjunto de nodos con XPathNavigator, se utiliza para navegar por conjuntos de nodos en un objeto XPathDocument o XmlDocument. El segundo, que se describe en este tema, se utiliza para navegar por nodos de espacios de nombres y atributos en un objeto XPathDocument o XmlDocument.

Navegación por nodos de atributos

Los atributos son propiedades de un elemento, no elementos secundarios de un elemento. Esta distinción es importante debido a los métodos de la clase XPathNavigator que se utilizan para navegar por los nodos secundarios, principales y relacionados.

Por ejemplo, los métodos MoveToPrevious y MoveToNext no se utilizan para navegar de un elemento a un atributo, ni entre atributos. En su lugar, los atributos tienen métodos de navegación distintos.

A continuación, se enumeran métodos de navegación por atributos de la clase XPathNavigator.

Cuando el nodo actual es un elemento, utilice la propiedad HasAttributes para ver si hay algún atributo asociado a dicho elemento. Una vez que se sabe que un elemento tiene atributos, existen varios métodos de acceso a atributos. Para recuperar un solo atributo del elemento, utilice el método GetAttribute. Para mover XPathNavigator a un atributo concreto, utilice el método MoveToAttribute. También puede iterar por cada atributo de un elemento utilizando el método MoveToFirstAttribute y, a continuación, realizando varias llamadas al método MoveToNextAttribute.

Nota

Cuando el objeto XPathNavigator se encuentra en un nodo de tipo atributo o espacio de nombres, los métodos MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext y MoveToPrevious siempre devolverán false, y no afectarán a la posición del XPathNavigator. Las excepciones son los métodos MoveTo, MoveToParent y MoveToRoot.

Navegación por nodos de espacios de nombres

Cada elemento tiene un conjunto de nodos de espacios de nombres asociado, uno para cada prefijo de espacio de nombres distinto que esté ligado a un identificador URI de espacio de nombres en el ámbito del elemento (incluido el prefijo XML ligado al espacio de nombres http://www.w3.org/XML/1998/namespace, que se declara de forma implícita en cada documento XML) y uno para el espacio de nombres predeterminado si hay uno en el ámbito del elemento. El elemento es el principal de cada uno de estos nodos de espacio de nombres; sin embargo, un nodo de espacio de nombres no es un elemento secundario de su elemento principal.

Al igual que en los atributos, los métodos MoveToPrevious y MoveToNext no se utilizan para navegar de un nodo de elementos a un nodo de espacio de nombres, ni entre nodos de espacios de nombres. En su lugar, los nodos de espacios de nombres tienen métodos de navegación distintos.

A continuación, se enumeran los métodos de navegación por espacios de nombres de la clase XPathNavigator.

Siempre hay al menos un nodo de espacios de nombres para cualquier elemento de un documento XML. Éste es el nodo de espacios de nombres con el prefijo xml y el identificador URI de espacio de nombres http://www.w3.org/XML/1998/namespace. Para recuperar un identificador URI de espacio de nombres dado un prefijo concreto, utilice el método GetNamespace. Para mover el objeto XPathNavigator a un nodo de espacios de nombres en particular, utilice el método MoveToNamespace. También puede iterar por cada nodo de espacios de nombres del ámbito de un elemento utilizando el método MoveToFirstNamespace y, a continuación, realizando varias llamadas al método MoveToNextNamespace.

Nota

Cuando el objeto XPathNavigator se encuentra en un nodo de tipo atributo o espacio de nombres, los métodos MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext y MoveToPrevious siempre devolverán false, y no afectarán a la posición del XPathNavigator. Las excepciones son los métodos MoveTo, MoveToParent y MoveToRoot.

Enumeración XPathNamespaceScope

Al navegar por nodos de espacios de nombres, es posible llamar a los métodos MoveToFirstNamespace y MoveToNextNamespace con un parámetro XPathNamespaceScope. Estos métodos se comportan de forma diferente a sus equivalentes que se llaman sin ningún parámetro. La enumeración XPathNamespaceScope tiene valores de All, ExcludeXml o Local.

Los siguientes ejemplos muestran qué espacios de nombres devuelven los métodos MoveToFirstNamespace y MoveToNextNamespace en diversos ámbitos de un documento XML.

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

Ésta es la secuencia de espacios de nombres (el espacio de nombres en el que está situado XPathNavigator después de llamar al método MoveToFirstNamespace y realizar, a continuación, una serie de llamadas al método MoveToNextNamespace).

  • Cuando está situado en element2: xmlns:books="http://www.contoso.com/books", xmlns="http://www.contoso.com" y xmlns:xml="http://www.w3.org/XML/1998/namespace".

  • Cuando está situado en element1: xmlns:books="http://www.contoso.com/books", xmlns="http://www.contoso.com" y xmlns:xml="http://www.w3.org/XML/1998/namespace".

  • Cuando está situado en root: xmlns:xml="http://www.w3.org/XML/1998/namespace".

Nota

La clase XPathNavigator devuelve nodos de espacios de nombres en el orden inverso del documento. Por lo tanto, MoveToFirstNamespace se desplaza básicamente al último nodo de espacios de nombres del ámbito actual.

Los siguientes ejemplos muestran qué espacios de nombres devuelven los métodos MoveToFirstNamespace y MoveToNextNamespace con la enumeración XPathNamespaceScope especificada en diversos ámbitos de 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>  

Cuando está situado en child2, ésta es la secuencia de espacios de nombres (el espacio de nombres en el que está situado XPathNavigator después de llamar al método MoveToFirstNamespace y realizar, a continuación, una serie de llamadas al método MoveToNextNamespace).

  • 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" y 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" y xmlns="http://www.contoso.com".

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

Nota

La clase XPathNavigator devuelve nodos de espacios de nombres en el orden inverso del documento. Por lo tanto, MoveToFirstNamespace se desplaza básicamente al último nodo de espacios de nombres del ámbito actual.

Vea también