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/namespace
de 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"
, exmlns:xml="http://www.w3.org/XML/1998/namespace"
.Quando localizado em
element1
:xmlns:books="http://www.contoso.com/books"
,xmlns="http://www.contoso.com"
, exmlns: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"
, exmlns: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"
, exmlns="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.