Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
As consultas XPath estão cientes de namespaces em um documento XML e podem usar prefixos de namespace para qualificar nomes de elementos e atributos. Qualificar nomes de elementos e atributos com um prefixo de namespace limita os nós retornados por uma consulta XPath apenas aos nós que pertencem a um namespace específico.
Por exemplo, se o prefixo books for mapeado com o namespace http://www.contoso.com/books, a consulta XPath abaixo /books:books/books:book selecionará apenas os elementos book no namespace http://www.contoso.com/books.
O XmlNamespaceManager
Para usar namespaces em uma consulta XPath, um objeto derivado da IXmlNamespaceResolver interface como a XmlNamespaceManager classe é construído com o URI e o prefixo do namespace a serem incluídos na consulta XPath.
O XmlNamespaceManager objeto pode ser usado na consulta de cada uma das seguintes maneiras.
O XmlNamespaceManager objeto é associado a um objeto existente XPathExpression usando o SetContext método do XPathExpression objeto. Você também pode compilar um novo XPathExpression objeto usando o método estático Compile que usa uma cadeia de caracteres que representa a expressão XPath e um XmlNamespaceManager objeto como parâmetros e retorna um novo XPathExpression objeto.
O XmlNamespaceManager objeto em si é passado como um parâmetro para um método de classe de aceitação XPathNavigator junto com uma cadeia de caracteres que representa a expressão XPath.
A seguir estão os métodos da XPathNavigator classe que aceitam um objeto derivado da IXmlNamespaceResolver interface como um parâmetro.
O namespace padrão
No documento XML a seguir, o namespace padrão com um prefixo vazio é usado para declarar o http://www.contoso.com/books namespace.
<books xmlns="http://www.contoso.com/books">
<book>
<title>Title</title>
<author>Author Name</author>
<price>5.50</price>
</book>
</books>
XPath trata o prefixo vazio como o null namespace. Em outras palavras, apenas prefixos mapeados para namespaces podem ser usados em consultas XPath. Isso significa que, se você quiser consultar um namespace em um documento XML, mesmo que seja o namespace padrão, precisará definir um prefixo para ele.
Por exemplo, sem definir um prefixo para o documento XML acima, a consulta /books/book XPath não retornaria nenhum resultado.
Um prefixo deve ser vinculado para evitar ambiguidade ao consultar documentos com alguns nós que não estão em um namespace e alguns em um namespace padrão.
O código a seguir define um prefixo para o namespace padrão e seleciona todos os book elementos do http://www.contoso.com/books namespace.
Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
Dim query As XPathExpression = navigator.Compile("/books:books/books:book")
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(navigator.NameTable)
manager.AddNamespace("books", "http://www.contoso.com/books")
query.SetContext(manager)
Dim nodes As XPathNodeIterator = navigator.Select(query)
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();
XPathExpression query = navigator.Compile("/books:books/books:book");
XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
manager.AddNamespace("books", "http://www.contoso.com/books");
query.SetContext(manager);
XPathNodeIterator nodes = navigator.Select(query);
Ver também
- XmlDocument
- XPathDocument
- XPathNavigator
- Processar dados XML usando o modelo de dados XPath
- Selecionar dados XML usando XPathNavigator
- Avaliar expressões XPath usando XPathNavigator
- Correspondência de nós usando XPathNavigator
- Tipos de nó reconhecidos através de consultas XPath
- Expressões XPath compiladas