Compartilhar via


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

A classe XPathNavigator fornece dois conjuntos de métodos de navegação: o primeiro conjunto, encontrado no tópico Node Set Navigation Using XPathNavigator, é usado para navegar em conjuntos de nós em um XPathDocument ou XmlDocument objeto. O segundo conjunto, descrito neste tópico, é usado para navegar em nós de atributo e namespace em um objeto XPathDocument ou XmlDocument.

Navegação do 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 em irmão, o pai, e os nós filho.

Por exemplo, os métodos MoveToPrevious 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.

Veja a seguir os métodos de navegação de atributo da XPathNavigator classe.

Quando o nó atual é um elemento, você pode usar a propriedade de HasAttributes para ver se houver algum atributo associado com o 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 atributo para um determinado atributo, use o MoveToAttribute método. Você também pode iterar sobre cada atributo de um elemento usando o método MoveToFirstAttribute , seguido por várias chamadas para o método de MoveToNextAttribute .

Observação

Quando o objeto XPathNavigator é posicionado em um nó de atributo ou namespace, os métodos MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext e MoveToPrevious sempre retornam false e não têm nenhum efeito sobre a posição do XPathNavigator. As exceções são os métodos MoveTo, MoveToParent e MoveToRoot.

Navegação do nó de namespace

Cada elemento tem um conjunto associado de nós de namespace, um para cada prefixo de namespace distinto associado a um URI de namespace no escopo do elemento (incluindo o prefixo XML associado 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 é um filho de seu elemento pai.

Assim como acontece com os atributos, os métodos MoveToPrevious 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.

Veja a seguir os métodos de navegação do namespace da XPathNavigator classe.

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

Observação

Quando o objeto XPathNavigator é posicionado em um nó de atributo ou namespace, os métodos MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext e MoveToPrevious sempre retornam false e não têm nenhum efeito sobre a posição do XPathNavigator. As exceções são os métodos MoveTo, MoveToParent e MoveToRoot.

A enumeração de XPathNamespaceScope

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

Os exemplos a seguir mostram quais namespaces são retornados pelo MoveToFirstNamespace e MoveToNextNamespace métodos em vários escopos em um 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 após chamar o método MoveToFirstNamespace, seguido por uma série de chamadas ao 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 de documento inversa. Portanto, MoveToFirstNamespace move essencialmente ao último nó do namespace no escopo atual.

Os exemplos a seguir mostram quais namespaces são retornados pelos métodos MoveToFirstNamespace e MoveToNextNamespace com a enumeração XPathNamespaceScope especificada em vários escopos 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 namespace (o namespace no qual o 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 de documento inversa. Portanto, MoveToFirstNamespace move essencialmente ao último nó do namespace no escopo atual.

Consulte também