Meu objetivo é extrair certos nós de vários arquivos xml com vários namespaces usando XPath. Tudo funciona bem, desde que eu conheça os URIs de namespace. O nome do namespace em si permanece constante, mas os esquemas (XSD) às vezes são gerados pelo cliente, ou seja, desconhecidos para mim. Então, fico com basicamente três opções:
use apenas um esquema para o namespace, esperando que nada dê errado (posso ter certeza?)
pegue os nós filhos do documento e procure o primeiro nó com um URI de namespace, esperando que esteja lá e apenas use o URI, esperando que seja o correto. pode dar errado por vários motivos
de alguma forma diga ao xpath: "olha, eu não me importo com os namespaces, apenas encontre TODOS os nós com este nome, posso até dizer o nome do namespace, mas não o URI". E esta é a questão aqui ...
Esta não é uma reiteração de várias perguntas "my xpath expression não funciona porque não estou ciente da consciência de namespace", conforme encontradas aqui ou aqui . Eu sei como usar o reconhecimento de namespace. Só não como se livrar disso.
fonte
Respostas:
Você pode usar a
local-name()
função XPath. Em vez de selecionar um nó comovocê pode selecionar todos os nós e filtrar aquele com o nome local correto:
fonte
local-name()
para se referir a atributos, de uma maneira sem conhecimento de namespace, consulte: stackoverflow.com/q/21239181/274677Você pode fazer o mesmo no XPath2.0 em uma sintaxe menos detalhada:
fonte
Você pode usar Namespace = false em um XmlTextReader
com:
fonte
'The 'xmlns' attribute is bound to the reserved namespace
erro.Ou você pode usar o nome ():
Ou apenas atributos de pesquisa:
Se você abrir o xml como um objeto PowerShell, ele ignorará os namespaces:
fonte
É meu exemplo em Qt C ++. Qt suporta XPath 2.0:
Resultado do programa:
"1 0 0 2 0 1 0 0 2 1 0 3 3 0 4 2 0 5\n"
Plane.dae
fonte