CodeKitHub
Ferramentas de código

Testador de XPath

Última atualização:

XPath é uma linguagem de consulta para selecionar nós de um documento XML (ou HTML) usando expressões de caminho, de forma parecida com a maneira como um caminho de arquivo localiza um arquivo dentro de uma árvore de pastas. Esta ferramenta permite colar qualquer XML, escrever uma expressão XPath e ver na hora quais nós correspondem — incluindo contagem de nós, saída serializada e mensagens de erro claras para XML malformado ou sintaxe XPath inválida. Tudo roda inteiramente no seu navegador usando o motor nativo `document.evaluate`, presente em qualquer navegador moderno, então nada do que você cola é enviado a lugar nenhum.

O que é esta ferramenta?

XPath (XML Path Language) é um padrão do W3C para navegar e selecionar nós — elementos, atributos, texto — dentro de um documento XML usando uma sintaxe compacta parecida com caminhos, por exemplo `//book[price>30]/title` seleciona cada `<title>` cujo irmão `<price>` seja maior que 30, em qualquer parte do documento. É usado por folhas de estilo XSLT, ferramentas de validação de XML, web scrapers, frameworks de automação de navegador (Selenium, Playwright) e bibliotecas XML de diversas linguagens de programação.

A versão atual implementada por todos os principais navegadores — Chrome, Firefox, Safari, Edge — é o XPath 1.0, a Recomendação original do W3C de 1999. Esta ferramenta usa exatamente esse motor nativo por meio da API `document.evaluate()` do navegador, então os resultados aqui correspondem ao que você obteria no DevTools do navegador ou em qualquer JavaScript executado em um navegador. Ela não implementa as especificações posteriores XPath 2.0/3.0/3.1 (que acrescentam recursos como expressões `for`, sequências e correspondência com regex) — veja as perguntas frequentes para entender o que isso significa na prática.

Uma expressão pode retornar um de dois tipos de resultado: um conjunto de nós (node-set — zero ou mais elementos, atributos ou nós de texto correspondentes, que esta ferramenta serializa e lista um por linha junto com a contagem), ou um valor escalar — um número, uma string ou um booleano — quando a própria expressão calcula um valor, como `count(//book)` ou `//book[1]/title = 'Dune'`.

Por que usar?

  • Depurar uma expressão XPath antes de embuti-la de forma fixa em um web scraper, um teste Selenium/Playwright ou uma folha de estilo XSLT.
  • Verificar rapidamente se uma determinada expressão XPath seleciona o nó esperado em uma amostra real de XML/HTML.
  • Consultar contagens exatas de correspondências e a saída serializada, em vez de adivinhar a partir do código.
  • Obter erros imediatos e legíveis para XML malformado ou sintaxe XPath inválida, em vez de um stack trace críptico.
  • 100% no lado do cliente: seu XML e sua expressão nunca saem do navegador.

Como usar

  1. Cole ou edite seu XML (ou HTML) na caixa de entrada — um documento de exemplo de uma livraria já vem preenchido para você ver a ferramenta funcionando de imediato.
  2. Digite uma expressão XPath no campo de expressão, ou edite o exemplo já preenchido.
  3. Clique em "Avaliar" (ou pressione Enter no campo de expressão).
  4. Leia os nós correspondentes exibidos abaixo, com a contagem no topo; resultados escalares (números, strings, booleanos) são exibidos diretamente.
  5. Se o XML ou a expressão forem inválidos, uma mensagem de erro específica substitui os resultados.

Exemplo

Entrada

XML:
<bookstore>
  <book><title>The Great Gatsby</title><price>12.99</price></book>
  <book><title>Learning XPath</title><price>34.50</price></book>
  <book><title>Dune</title><price>45.00</price></book>
</bookstore>

XPath: //book[price>30]/title

Resultado

✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>

Apenas 2 dos 3 livros têm preço acima de 30, então exatamente 2 elementos <title> são retornados — o terceiro livro (Gatsby, $12,99) é corretamente excluído.

XPath vs. seletores CSS em resumo

As duas linguagens selecionam nós de um documento, mas resolvem problemas diferentes. Use esta tabela para escolher a ferramenta certa para uma determinada seleção.

CapacidadeXPathSeletores CSS
Selecionar por tag/classe/id descendo na árvoreSimSim — e geralmente mais rápido
Selecionar por conteúdo visível/de textoSim — `contains(text(),'x')`Não
Subir até um pai/ancestralSim — `//div[span]/..`Não (`:has()` é uma exceção parcial mais recente)
Comparações entre valores de irmãos (ex.: `price>30`)SimNão
Funciona fora do navegador (ferramentas de XML no servidor, XSLT)SimNão — seletores CSS são específicos de navegador/DOM

Ferramentas relacionadas

Trabalha com formatos de dados estruturados? Estas ferramentas combinam bem com testes de XPath.

Formatador de JSON · Decodificador de JWT

Perguntas frequentes

Para que serve o XPath?

O XPath seleciona nós — elementos, atributos ou texto — de um documento XML ou HTML usando uma sintaxe de caminhos. É a linguagem de seleção por trás das transformações XSLT, de muitos validadores de XML, e é amplamente usada em web scraping e automação de testes de navegador (Selenium, Playwright, Cypress) para localizar elementos em uma página, especialmente quando os seletores CSS sozinhos não conseguem expressar a condição necessária.

XPath ou seletores CSS — qual devo usar?

Eles se sobrepõem, mas não são equivalentes. O XPath consegue selecionar um elemento pai com base no conteúdo de um filho (`//div[span='Total']`), subir na árvore até ancestrais e selecionar pelo texto visível (`//button[contains(text(),'Submit')]`) — os seletores CSS não conseguem subir na árvore nem corresponder a conteúdo de texto de forma alguma. Se você está apenas selecionando por tag, classe ou ID descendo pelo documento, os seletores CSS são mais simples de escrever e, em geral, mais rápidos de avaliar. Recorra ao XPath especificamente quando precisar "selecionar o pai deste texto" ou "selecionar pelo que o elemento diz", não apenas pela tag ou classe.

Esta ferramenta suporta funções do XPath 2.0 ou 3.0?

Não — e nenhum navegador suporta. Os navegadores implementam o XPath 1.0 (a Recomendação do W3C de 1999) por meio de `document.evaluate()`, e esta ferramenta usa exatamente esse mesmo motor nativo, então ela reflete fielmente o que você obteria ao rodar a mesma expressão no DevTools do navegador ou em JavaScript. Funções e recursos introduzidos no XPath 2.0/3.0/3.1 (como expressões `for`, sequências ou `matches()` com regex) não estão disponíveis — aqui só funcionam as funções da versão 1.0, como `contains()`, `starts-with()`, `substring()`, `count()`, `position()` e `last()`.

Quais são algumas expressões XPath comuns que eu deveria conhecer?

`//tag` seleciona cada `<tag>` em qualquer parte do documento. `//tag[@attr='value']` seleciona elementos `<tag>` cujo atributo `attr` seja igual a `value`. `//tag[contains(text(),'x')]` seleciona elementos `<tag>` cujo texto direto contenha `x`. `//tag[1]` seleciona o primeiro `<tag>` irmão dentro de cada pai. `//parent/child` seleciona elementos `<child>` que sejam filhos diretos de `<parent>`. `count(//tag)` retorna um número em vez de um conjunto de nós.

Esta ferramenta lida com namespaces XML?

Apenas o caso comum sem namespace é suportado de forma limpa, o que cobre a grande maioria do XML/HTML escrito à mão ou obtido por scraping. Se o seu documento declarar um namespace XML (por exemplo, `xmlns="..."` no elemento raiz), o `document.evaluate` exige uma função resolvedora ciente de namespaces que mapeie prefixos para URIs, algo que esta ferramenta simples não configura — expressões sobre XML com namespace podem retornar zero correspondências mesmo parecendo corretas. Essa é uma limitação conhecida, não um bug: remova a declaração de namespace da sua amostra, ou use a função local-name() (por exemplo, `//*[local-name()='title']`) como alternativa.

Meu XML ou minha expressão XPath são enviados a um servidor?

Não. Tudo roda localmente usando o `DOMParser` e o `document.evaluate()` embutidos no seu navegador — o mesmo motor que o navegador já usa internamente. Nada do que você digita ou cola sai do seu dispositivo em algum momento.

Ferramentas relacionadas