Navegação de nó de atributo e namespace usando XPathNavigator
A XPathNavigator classe fornece dois conjuntos de métodos de navegação, o primeiro conjunto, encontrado no tópico Navegação do conjunto de nós usando XPathNavigator , são usados para navegar por conjuntos de nós em um XPathDocument objeto OR XmlDocument . O segundo conjunto, descrito neste tópico, é usado para navegar pelos nós de atributo e namespace em um XPathDocumentXmlDocument ou 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 XPathNavigator classe usados para navegar pelos nós irmãos, pais e filhos.
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 usando o MoveToFirstAttribute método, seguido por várias chamadas para o MoveToNextAttribute método.
Nota
Quando o objeto é posicionado XPathNavigator em um atributo ou nó de namespace, os MoveToChildmétodos , MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToNextMoveToId, e sempre MoveToPrevious retornam false
e não têm efeito sobre a posição do XPathNavigator. As exceções são o MoveTo, MoveToParente MoveToRoot métodos.
Navegação de 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 é filho de 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 URI http://www.w3.org/XML/1998/namespace
do namespace. Para recuperar um URI de namespace no escopo dado um prefixo específico, use o GetNamespace método. Para mover o XPathNavigator objeto para um nó de namespace específico, use o MoveToNamespace método. 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.
Nota
Quando o objeto é posicionado XPathNavigator em um atributo ou nó de namespace, os MoveToChildmétodos , MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToNextMoveToId, e sempre MoveToPrevious retornam false
e não têm efeito sobre 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 MoveToFirstNamespace métodos e MoveToNextNamespace podem ser chamados com um 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 a MoveToFirstNamespace seguir mostram quais namespaces são retornados pelos métodos e 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 no qual o XPathNavigator é posicionado depois de chamar o MoveToFirstNamespace método seguido por uma série de chamadas para o método) é a MoveToNextNamespace seguinte.
Quando posicionado em
element2
:xmlns:books="http://www.contoso.com/books"
,xmlns="http://www.contoso.com"
, exmlns:xml="http://www.w3.org/XML/1998/namespace"
.Quando posicionado em
element1
:xmlns:books="http://www.contoso.com/books"
,xmlns="http://www.contoso.com"
, exmlns:xml="http://www.w3.org/XML/1998/namespace"
.Quando posicionado em
root
:xmlns:xml="http://www.w3.org/XML/1998/namespace".
Nota
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 a MoveToFirstNamespace seguir mostram quais namespaces são retornados pelos métodos e MoveToNextNamespace com a XPathNamespaceScope enumeração 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 posicionada no child2
, a sequência de namespace (o namespace no qual o XPathNavigator namespace é posicionado depois de chamar o MoveToFirstNamespace método seguido por uma série de chamadas para o método) é a MoveToNextNamespace seguinte.
All:
xmlns:c="urn:c"
,xmlns:a="urn:a"
, ,xmlns=""
,xmlns:b="http://www.contoso.com/b"
,xmlns="http://www.contoso.com"
xmlns:a="http://www.contoso.com/a"
, exmlns:xml="http://www.w3.org/XML/1998/namespace"
.ExcludeXml:
xmlns:c="urn:c"
,xmlns:a="urn:a"
,xmlns=""
, ,xmlns:a="http://www.contoso.com/a"
xmlns:b="http://www.contoso.com/b"
, exmlns="http://www.contoso.com"
.Local:
xmlns:c="urn:c"
.
Nota
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.