Compartir a través de


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

La XPathNavigator clase proporciona dos conjuntos de métodos de navegación, el primer conjunto, que se encuentra en el tema Navegación del conjunto de nodos mediante XPathNavigator , se usan para navegar por conjuntos de nodos en un XPathDocument objeto o XmlDocument . El segundo conjunto, descrito en este tema, se usa para navegar por los nodos de atributo y espacio de nombres 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 MoveToPrevious métodos y MoveToNext no se usan para navegar desde un elemento a un atributo o entre atributos. En su lugar, los atributos tienen distintos métodos de navegación.

A continuación se muestran los métodos de navegación de atributos de la XPathNavigator clase .

Cuando el nodo actual es un elemento, puede usar la HasAttributes propiedad para ver si hay algún atributo asociado al elemento . Después de saber que un elemento tiene atributos, hay varios métodos para acceder a los atributos. Para recuperar un único atributo del elemento, use el GetAttribute método . Para mover el objeto XPathNavigator a un atributo determinado, use el MoveToAttribute método . También puede recorrer en iteración cada atributo de un elemento mediante el MoveToFirstAttribute método , seguido de varias llamadas al MoveToNextAttribute método .

Nota:

Cuando el XPathNavigator objeto se coloca en un nodo de atributo o espacio de nombres, los MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext y MoveToPrevious siempre devuelven false, y no tienen ningún efecto en la posición de XPathNavigator. Las excepciones son los MoveTométodos , MoveToParenty MoveToRoot .

Navegación por nodos de espacios de nombres

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

Al igual que con los atributos, los métodos MoveToPrevious y MoveToNext no se usan para navegar desde un elemento a un nodo de espacio de nombres ni entre nodos de espacio de nombres. En cambio, los nodos de espacio de nombres cuentan con métodos distintos de navegación.

A continuación se muestran los métodos de navegación del espacio de nombres de la XPathNavigator clase .

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 XPathNavigator objeto a un nodo de espacio de nombres determinado, use el MoveToNamespace método . 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 XPathNavigator objeto se coloca en un nodo de atributo o espacio de nombres, los MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext y MoveToPrevious siempre devuelven false, y no tienen ningún efecto en la posición de XPathNavigator. Las excepciones son los MoveTométodos , MoveToParenty MoveToRoot .

Enumeración XPathNamespaceScope

Al navegar por los nodos de espacio de nombres, los métodos MoveToFirstNamespace y MoveToNextNamespace se pueden llamar 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 XPathNamespaceScope enumeración tiene valores de All, ExcludeXmlo Local.

En los siguientes ejemplos se muestra qué espacios de nombres devuelven los métodos MoveToFirstNamespace y MoveToNextNamespace en varios ámbitos de un documento XML.

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

La secuencia de espacio de nombres (el espacio de nombres en el que XPathNavigator está colocado después de llamar al método MoveToFirstNamespace seguido de una serie de llamadas al método MoveToNextNamespace) es la siguiente.

  • Cuando se coloca 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 se coloca 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 se coloca 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 se coloca en child2, la secuencia del espacio de nombres (el espacio de nombres en el que XPathNavigator se coloca después de llamar al MoveToFirstNamespace método seguido de una serie de llamadas al MoveToNextNamespace método) es el siguiente.

  • 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.

Consulte también