Partilhar via


Navegação de nós de namespace e atributo usando XPathNavigator

A XPathNavigator classe fornece dois conjuntos de métodos de navegação. O primeiro conjunto, encontrado no tema Navegação do conjunto de nós usando XPathNavigator, é usado para navegar por conjuntos de nós em um ou XPathDocument objeto. O segundo conjunto, descrito neste tópico, é usado para navegar pelos nós de atributo e namespace num XPathDocument ou XmlDocument objeto.

Navegação de nó de atributo

Atributos são propriedades de um elemento, não filhos de um elemento. Essa distinção é importante devido aos métodos da classe XPathNavigator usada para navegar pelos nós irmão, pai e filho.

Por exemplo, os MoveToPrevious métodos e MoveToNext não são usados para navegar de um elemento para um atributo ou entre atributos. Em vez disso, os atributos têm métodos distintos de navegação.

A seguir estão os métodos de navegação de atributo da XPathNavigator classe.

Quando o nó atual é um elemento, você pode usar a HasAttributes propriedade para ver se há algum atributo associado ao elemento. Depois que se sabe que um elemento tem atributos, há vários métodos para acessar atributos. Para recuperar um único atributo do elemento , use o GetAttribute método. Para mover o XPathNavigator para um atributo específico, use o MoveToAttribute método. Você também pode iterar sobre cada atributo de um elemento, utilizando o método MoveToFirstAttribute, seguido por várias chamadas para o método MoveToNextAttribute.

Observação

Quando o objeto XPathNavigator está posicionado num atributo ou nó de namespace, os métodos MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext e MoveToPrevious sempre retornam false e não afetam a posição do XPathNavigator. As exceções são o MoveTo, MoveToParente MoveToRoot métodos.

Navegação do Nó de Namespace

Cada elemento tem um conjunto associado de nós de namespace, um para cada prefixo de namespace distinto que está vinculado a um URI de namespace no escopo do elemento (incluindo o prefixo XML vinculado ao http://www.w3.org/XML/1998/namespace namespace, que é implicitamente declarado em cada documento XML) e um para o namespace padrão se um estiver no escopo do elemento. O elemento é o pai de cada um desses nós de namespace; no entanto, um nó de namespace não é descendente do seu elemento pai.

Assim como acontece com os atributos, os MoveToPrevious métodos e MoveToNext não são usados para navegar de um elemento para um nó de namespace ou entre nós de namespace. Em vez disso, os nós de namespace têm métodos distintos de navegação.

A seguir estão os métodos de navegação de namespace da XPathNavigator classe.

Há sempre pelo menos um nó de namespace no escopo de qualquer elemento em um documento XML. Este é o nó do namespace com o prefixo xml e o namespace URI http://www.w3.org/XML/1998/namespace. Para recuperar um URI de namespace no escopo dado um prefixo específico, use o método GetNamespace. Para mover o XPathNavigator objeto para um nó de namespace determinado, use o método MoveToNamespace. Você também pode iterar sobre cada nó de namespace no escopo de um elemento usando o MoveToFirstNamespace método seguido por várias chamadas para o MoveToNextNamespace método.

Observação

Quando o objeto XPathNavigator está posicionado num atributo ou nó de namespace, os métodos MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext e MoveToPrevious sempre retornam false e não afetam a posição do XPathNavigator. As exceções são o MoveTo, MoveToParente MoveToRoot métodos.

A enumeração XPathNamespaceScope

Ao navegar pelos nós do namespace, os métodos MoveToFirstNamespace e MoveToNextNamespace podem ser chamados com XPathNamespaceScope parâmetro. Esses métodos se comportam de forma diferente de seus homólogos chamados sem parâmetros. A XPathNamespaceScope enumeração tem valores de All, ExcludeXml, ou Local.

Os exemplos MoveToFirstNamespace a seguir mostram quais namespaces são retornados pelos métodos MoveToNextNamespace em vários âmbitos num documento XML.

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

A sequência de namespace (o namespace no qual o XPathNavigator é posicionado depois de chamar o método MoveToFirstNamespace seguido por uma série de chamadas para o método MoveToNextNamespace) é a seguinte.

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

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

  • Quando posicionado em root: xmlns:xml="http://www.w3.org/XML/1998/namespace".

Observação

A XPathNavigator classe retorna nós de namespace na ordem inversa do documento. Portanto, MoveToFirstNamespace essencialmente se move para o último nó de namespace no escopo atual.

Os exemplos MoveToFirstNamespace a seguir mostram quais namespaces são retornados pelos métodos MoveToFirstNamespace e XPathNamespaceScope, e a enumeração especificada em vários níveis em um 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 posicionado em child2, a sequência de namespaces (o namespace no qual XPathNavigator está posicionado após chamar o método MoveToFirstNamespace, seguido por uma série de chamadas ao método MoveToNextNamespace) é a seguinte.

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

Observação

A XPathNavigator classe retorna nós de namespace na ordem inversa do documento. Portanto, MoveToFirstNamespace essencialmente se move para o último nó de namespace no escopo atual.

Ver também