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.
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de