Testador de XPath

Seu documento e sua expressão ficam neste navegador.

Cole XML ou HTML com até 1.000.000 de caracteres. A avaliação acontece neste navegador com XPath 1.0.

XPath 1.0 absoluto ou relativo. Os prefixos declarados no documento são registrados automaticamente; o namespace padrão fica disponível com o prefixo d.

Escrever XPath para scraping ou XSLT vira tentativa e erro se você não tem um ambiente de teste ao vivo. Este testador recebe seu XML ou HTML em um painel e sua expressão em outro, avalia XPath 1.0 com o motor do seu próprio navegador e lista cada nó encontrado com tipo, atributos, conteúdo de texto e marcação serializada. Expressões escalares como count(//book) retornam o valor diretamente, e os prefixos de namespace declarados no documento são registrados para você. Tudo roda no seu navegador: o documento nunca é enviado para servidor nenhum.

Como testar uma expressão XPath

  1. 1

    Cole XML ou HTML

    A detecção automática muda para a análise HTML tolerante ao ver um doctype ou uma raiz HTML; você também pode forçar o modo XML ou HTML.

  2. 2

    Digite seu XPath

    Absoluta (`/library/book`) ou relativa (`//div[@class='card']`), qualquer expressão XPath 1.0.

  3. 3

    Avalie

    O motor XPath do seu navegador executa a consulta localmente; nada é enviado a servidor algum.

  4. 4

    Inspecione os resultados

    Cada correspondência mostra o tipo de nó, os atributos, o texto aparado e a marcação serializada; até 200 correspondências são listadas.

O essencial do XPath 1.0

Expressão O que seleciona
/books/book Os <book> filhos da raiz <books>
//book Todo <book> em qualquer lugar do documento
//book[@id='42'] Os <book> com atributo id igual a 42
//book[1] O primeiro <book> de cada pai (não do documento)
(//book)[1] O primeiro <book> do documento inteiro
//book[title='1984'] Os <book> cujo texto de <title> é “1984”
//book/@id Os atributos id de todos os elementos <book>
//book[position() > 1] Todos os <book> menos o primeiro
//book[last()] O último <book> de cada pai

Expressões escalares também funcionam: count(//book) retorna um número, string(//title) uma string e boolean(//book[@id]) verdadeiro ou falso. O testador mostra esses valores diretamente em vez de uma lista de nós.

Eixos comuns além de child

  • ancestor::, todos os ancestrais
  • following-sibling::, os irmãos depois do nó atual
  • preceding-sibling::, os irmãos anteriores
  • descendant::, todos os descendentes
  • attribute:: (atalho @), os atributos do nó atual
  • parent:: (atalho ..), o elemento pai

Peculiaridades do HTML

HTML não é XML estrito, então o testador o analisa com tolerância usando o parser HTML do seu navegador em vez do parser XML estrito. O modo HTML é detectado automaticamente a partir de <!DOCTYPE html> ou de uma raiz <html>, e você pode forçar qualquer um dos modos com o seletor de modo do documento. No modo HTML, os nomes de tags e atributos ficam em minúsculas, então escreva seu XPath em minúsculas: //div[@class], não //DIV[@CLASS].

Namespaces

XML com namespaces exige o registro dos prefixos:

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <item>
    <content:encoded>...</content:encoded>
  </item>
</rss>

O testador varre o documento em busca de declarações xmlns e registra cada prefixo automaticamente, então //content:encoded simplesmente funciona. Um namespace padrão (um xmlns="..." sem prefixo) não tem prefixo no documento, então o testador o vincula ao prefixo d: selecione os <item> de um feed com namespace padrão usando //d:item. Os namespaces registrados são listados ao lado dos resultados.

O que este testador não avalia

Os navegadores avaliam XPath 1.0, o mesmo dialeto usado pela maioria das stacks de scraping. Recursos do XPath 2.0 em diante, como matches(string, regex), tokenize(string, delimiter), expressões for ... return e operadores de sequência, não fazem parte dele; você os encontra nas toolchains de XSLT 2.0/3.0. XPath 1.0 continua sendo a escolha mais portátil para web scraping.

Dicas de teste

  • Comece amplo e vá afunilando. Primeiro //div, depois //div[@class], depois o valor exato da classe.
  • Confira as declarações de namespace. A maioria dos “por que meu XPath não retorna nada?” é namespace; olhe a lista de namespaces registrados.
  • Atenção às maiúsculas. XML diferencia maiúsculas de minúsculas. O modo HTML converte os nomes para minúsculas.
  • Teste string() ao extrair texto. //p/text() e string(//p) diferem quando há marcação aninhada.

Perguntas frequentes

Não, só XPath. A maioria dos navegadores aceita os dois via document.querySelectorAll (CSS) e document.evaluate (XPath). Use o que for mais claro para a tarefa.

A análise de HTML converte nomes de tags e atributos para minúsculas. Garanta que seu XPath use minúsculas: //div[@class], não //DIV[@CLASS]. Confira também o modo: forçar XML em um HTML malformado falha com erro de análise, enquanto o modo HTML o analisa com tolerância.

Os prefixos declarados no documento são registrados automaticamente para a sua expressão. Um namespace padrão é vinculado ao prefixo d, então //d:item seleciona os elementos <item> de um documento com namespace padrão. Os vínculos ativos são listados junto com os resultados.

Não. O documento e a expressão são avaliados pelo motor XPath do seu próprio navegador e não são enviados ao nosso servidor, armazenados nem adicionados ao endereço da página; eles só permanecem na sessão deste navegador para que a visualização em várias etapas possa mostrar seus resultados.

Ferramentas relacionadas