Testador de XPath

Teste expressões XPath online no seu XML e veja cada nó encontrado, com o caminho e a linha. Tudo roda no seu navegador, então seu XML nunca é enviado.

O testador de XPath roda inteiramente no seu navegador e precisa de JavaScript. O resto desta página funciona sem ele. Alternativas: xmllint --xpath na linha de comando, ou a biblioteca lxml em Python.

Experimente:

Cole XML, solte um arquivo ou carregue o exemplo. Os arquivos são lidos no seu navegador: nada é enviado.

Resultado

XPath 1.0, avaliado pelo seu navegador. Mostrar na entrada seleciona um resultado no seu XML.

Os nós ou o valor que sua expressão selecionar vão aparecer aqui.

Esta ferramenta ajudou você? Apoie o XMLNest

Uma expressão de exemplo seleciona os títulos dos livros em francês, e "Show in input" destaca um deles no XML. Depois, //book não encontra nada, porque o XML tem um namespace padrão: a correção sugerida, //d:book, encontra os 4 livros. (24 segundos, sem som, interface em inglês)

Como testar uma expressão XPath?

Cole seu XML à esquerda ou solte um arquivo ali. Digite uma expressão no campo XPath e pressione Enter ou clique em Avaliar. Cada nó encontrado aparece com o tipo, um caminho curto como /catalog/book[2]/title, a linha e o conteúdo. Mostrar na entrada seleciona esse nó no seu XML. Uma função como count() retorna um número, e o resultado mostra esse valor. Copiar e Baixar entregam o resultado como texto simples. Carregar exemplo abre um catálogo de livros para você testar na hora.

Por que minha expressão não retorna nada?

Em nove de cada dez casos, é um namespace. Quando o elemento raiz tem xmlns="…", todo elemento sem prefixo pertence a esse namespace padrão, e um simples //book deixa de encontrá-lo. Este testador dá um prefixo ao namespace padrão, d, a menos que você escolha outro em Namespaces, e sugere a expressão corrigida quando percebe o problema. Outras causas comuns: um erro de digitação em um nome, já que o XML diferencia maiúsculas de minúsculas, ou um @ esquecido antes de um atributo.

Exemplos de expressões para testar

//book/title lista todos os títulos. //book[@lang='en'] fica com os livros cujo atributo lang é en. count(//book) conta esses livros, e sum(//price) soma os preços. //title[contains(., 'Dark')] encontra títulos que contêm uma palavra, e //book[last()] pega o último livro. Para selecionar o próprio atributo, escreva //book/@id. O teste text() retorna nós de texto, enquanto string() retorna o texto completo de um elemento.

Qual versão de XPath este avaliador suporta?

XPath 1.0, a versão embutida em todos os navegadores, com as suas 27 funções. XPath 2.0 e 3.1 não são suportados, então lower-case(), matches() ou if … then … else geram uma mensagem clara, muitas vezes com uma alternativa em 1.0. As mesmas expressões funcionam em uma folha de estilo XSLT 1.0: experimente no testador de XSLT. Se o seu XML tiver um erro de sintaxe, o testador mostra primeiro a linha dele, como faz o validador de XML.

Esta ferramenta envia meu XML?

Não. A expressão é avaliada nesta aba do navegador, e as regras de segurança desta página bloqueiam requisições de rede. Nada é salvo: feche a aba e seu XML some. Para deixar legível um arquivo longo em uma linha só, use antes o formatador de XML.

Dúvidas

Por que //book não encontra nada se meu XML tem elementos book?

Seu XML provavelmente tem um namespace padrão, escrito xmlns="…" na raiz. No XPath 1.0, um nome sem prefixo só encontra elementos sem namespace. Este testador dá um prefixo ao namespace padrão, d por padrão, então escreva //d:book.

Posso usar funções do XPath 2.0 ou 3.1?

Não. Os navegadores trazem o XPath 1.0, e este testador usa o motor do navegador. Funções como lower-case() ou matches() geram uma mensagem clara, muitas vezes com um jeito de chegar ao mesmo resultado em XPath 1.0.

Qual é a diferença entre text() e string()?

text() seleciona os nós de texto que estão diretamente dentro de um elemento, então você recebe nós. string() retorna o texto do elemento inteiro, filhos incluídos, como um único valor.

Como contar ou filtrar nós?

count(//item) retorna um número. //item[contains(@name, 'pro')] fica com os itens cujo name contém pro. //item[position() <= 3] fica com os três primeiros, e //item[last()] com o último.

Qual é o tamanho máximo do meu XML?

Até 10 MB. A lista mostra os primeiros 500 resultados, e Copiar ou Baixar entregam todos como texto simples.

Meu XML é enviado para algum lugar?

Não. A expressão roda nesta aba do navegador, e a página não tem permissão para fazer requisições de rede. Feche a aba e seu XML some.