Pular para o conteúdo

Testador de XPath

XPath Tester

Avalia um XPath ou seletor CSS contra XML ou HTML e lista cada nó encontrado.

Executa uma expressão XPath 1.0 ou um seletor CSS contra um documento XML ou HTML e mostra cada nó que casou, com o caminho absoluto até cada um. A avaliação é a do próprio navegador, então o que você vê aqui é o que `document.evaluate` vai fazer no seu código.

🔒 Roda inteiramente no seu navegadorxpathxmlselectortest

Expressão XPath 1.0

Linguagem de consulta

Documento

Ler como

Solte um arquivo

Lido só nesta aba.

Resultados

Os resultados aparecem aqui enquanto você digita.

Como ele roda

  • · A avaliação roda sobre o document.evaluate (XPath 1.0) e o querySelectorAll do próprio navegador. A tipagem do resultado — conjunto de nós, número, string, booleano —, o caminho absoluto de cada nó e o tratamento dos prefixos de namespace são desta ferramenta.
  • · O modo XML lê de forma estrita e aponta o que está errado; o modo HTML lê com folga, do jeito que um navegador lê. O HTML normaliza os nomes de tag para minúsculas, então //DIV não serve e //div serve.
  • · Num documento com namespace padrão (xmlns="…"), um nome sem prefixo não casa com nada: é a regra do XPath 1.0. Use o prefixo _ como em //_:item.
  • · As funções de XPath 2.0 e 3.x (matches, ends-with, lower-case) não existem em nenhum navegador. contains·starts-with·translate·normalize-space é o que a 1.0 te dá.
  • · O documento é lido só nesta aba e não é enviado para lugar nenhum.

Para JSON, o testador de JSONPath ou o playground do jq é a ferramenta certa.

Como usar

  1. Escolha como o documento é lido

    O modo XML é estrito e relata o que está malformado. O modo HTML é tolerante como um navegador é, e normaliza os nomes das tags para minúsculas.

  2. Escreva a expressão

    XPath ou um seletor CSS: a chave alterna entre os dois. Os botões de exemplo cobrem atributos, predicados, namespaces, nós de comentário e as funções que devolvem escalares.

  3. Leia o tipo do resultado primeiro

    XPath devolve quatro tipos de coisa, e só um deles é um conjunto de nós. `count()`, `string()` e `boolean()` te dão um valor único, mostrado sozinho em vez de como uma lista de correspondências vazia.

Perguntas frequentes

Minha expressão não casa com nada e o documento parece certo.

Quase com certeza um namespace padrão. Se o documento tem `xmlns="…"` na raiz, o XPath 1.0 diz que um nome sem prefixo não casa com nada: você precisa vincular um prefixo. Aqui esse prefixo é `_`, então `//item` vira `//_:item`.

Por que `matches()` não existe?

Porque os navegadores implementam só XPath 1.0. `matches`, `ends-with`, `lower-case` e o resto chegaram no 2.0, e nenhum navegador o tem. O kit do 1.0 é `contains`, `starts-with`, `translate` e `normalize-space`.

XPath ou CSS: qual devo usar?

CSS é mais curto e basta para a maior parte do scraping. XPath consegue subir (`..`, `ancestor::`), casar por conteúdo de texto e devolver números e strings, nada do que um seletor consegue fazer. Esta página executa os dois para você compará-los sobre o mesmo documento.

Ele busca uma página para mim?

Não. Você cola ou solta o documento e ele é lido nesta aba. Buscar precisaria de um proxy — o navegador não deixa uma página ler outra origem — e esse proxy veria tudo o que você testou.

Pode receber de

Em seguida

Estas aceitam o que esta ferramenta produz, então o resultado pode ir direto.