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 Navegação do nó usando XPathNavigator, é usado para navegar em conjuntos de nós em um objeto XPathDocument ou XmlDocument. 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

Os 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, MoveToPrevious e métodos de MoveToNext não são usados para navegar de um elemento a um atributo ou entre atributos. Em vez disso, os atributos possuem métodos distintos de navegação.

Estes são os métodos de navegação de atributo de classe de XPathNavigator .

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 souber que um elemento tem atributos, há vários métodos para acessar atributos. Para recuperar um único atributo do elemento, use o método de GetAttribute . Para mover XPathNavigator a um atributo específico, use o método de MoveToAttribute . 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 de XPathNavigator é posicionado em um nó de atributo ou de namespace, em MoveToChild, em MoveToFirst, em MoveToFirstChild, em MoveToFollowing, em MoveToId, em MoveToNext e métodos em MoveToPrevioussempre de retorno de false , e não tem efeito na posição de XPathNavigator. As exceções são MoveTo, MoveToParent, e métodos de MoveToRoot .

Navegação do nó de namespace

Cada elemento tem um conjunto associado de nós de namespace, um para cada prefixo diferente do namespace que é associado ao URI de namespace no escopo para o elemento (incluindo o prefixo XML limite para o espaço de http://www.w3.org/XML/1998/namespace , que é declarada implicitamente em cada documento XML) e um para o namespace padrão se uma estiver no escopo para o 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.

Como com atributos, MoveToPrevious e métodos de MoveToNext não são usados para navegar de um elemento a um nó de namespace, ou entre nós de namespace. Em vez disso, os nós de namespace possuem métodos distintos de navegação.

Estes são os métodos de navegação do namespace da classe de XPathNavigator .

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 de XPathNavigator é posicionado em um nó de atributo ou de namespace, em MoveToChild, em MoveToFirst, em MoveToFirstChild, em MoveToFollowing, em MoveToId, em MoveToNext e métodos em MoveToPrevioussempre de retorno de false , e não tem efeito na posição de XPathNavigator. As exceções são MoveTo, MoveToParent, e métodos de MoveToRoot .

A enumeração de XPathNamespaceScope

Para navegar em nós de namespace os métodos de MoveToFirstNamespace e de MoveToNextNamespace podem ser chamados com um parâmetro de XPathNamespaceScope . Esses métodos se comportam de maneira diferente que suas contrapartes chamadas sem parâmetros. A enumeração de XPathNamespaceScope tem valores de All, de ExcludeXml, ou de Local.

Aos exemplos a seguir mostram que namespaces são retornadas pelos métodos de MoveToFirstNamespace e de MoveToNextNamespace 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 que XPathNavigator é posicionado na depois de chamar o método de MoveToFirstNamespace tiver usado por uma série de chamadas para o método de MoveToNextNamespace ) é da seguinte maneira.

  • Quando localizado 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 localizado 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 localizado em root: xmlns:xml="http://www.w3.org/XML/1998/namespace".

Observação

Os nós de namespace de retornos de classe de XPathNavigator na ordem inversa do documento. Portanto, MoveToFirstNamespace move essencialmente ao último nó do namespace no escopo atual.

Aos exemplos a seguir mostram que namespaces são retornadas pelos métodos de MoveToFirstNamespace e de MoveToNextNamespace com a enumeração de 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 XPathNavigator é posicionado na depois de chamar o método de MoveToFirstNamespace seguido por uma série de chamadas para o método de MoveToNextNamespace ) é da seguinte maneira.

  • 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

Os nós de namespace de retornos de classe de XPathNavigator na ordem inversa do documento. Portanto, MoveToFirstNamespace move essencialmente ao último nó do namespace no escopo atual.

Confira também