Selecione Elemento em um Namespace com o XPath
-
02-07-2019 - |
Pergunta
Eu quero selecionar o elemento mais alto em um documento que tem um determinado namespace (prefixo).
Mais especificamente: Eu tenho documentos XML que quer começar com / html / corpo (no namespace XHTML) ou com um dos vários elementos em um namespace particular. Eu efetivamente querer retirar / html / corpo e apenas retornar o conteúdo do corpo ou o elemento namespaced toda raiz.
Solução
Em XPath 2.0 e XQuery 1.0 você pode testar contra o prefixo namespace usando o no escopo-prefixos () função em um predicado. por exemplo.
//*[in-scope-prefixes(.)='html']
Se você não pode usar v2, em XPath 1.0 pode utilizar a namespace-uri () função para teste contra o próprio namespace. por exemplo.
//*[namespace-uri()='http://www.w3c.org/1999/xhtml']
Outras dicas
A expressão XPath que eu quero é:
/html:html/html:body/node()|/foo:*
Quando o prefixo "html" é mapeado para o namespace XHTML, e o prefixo "foo" é mapeado ao meu namespace de destino.