Probador de XPath

Tu documento y tu expresión se quedan en este navegador.

Pega XML o HTML con hasta 1.000.000 de caracteres. La evaluación se realiza en este navegador con XPath 1.0.

XPath 1.0 absoluto o relativo. Los prefijos declarados en el documento se registran automáticamente; el espacio de nombres por defecto está disponible con el prefijo d.

Escribir XPath para scraping o XSLT es puro ensayo y error si no tienes un entorno de pruebas en vivo. Este probador recibe tu XML o HTML en un panel y tu expresión en otro, evalúa XPath 1.0 con el propio motor de tu navegador y lista cada nodo coincidente con su tipo, atributos, contenido de texto y marcado serializado. Las expresiones escalares como count(//book) devuelven su valor directamente, y los prefijos de espacios de nombres declarados en el documento se registran por ti. Todo se ejecuta en tu navegador: el documento nunca se sube a ningún servidor.

Cómo probar una expresión XPath

  1. 1

    Pega XML o HTML

    La detección automática cambia al análisis HTML tolerante cuando ve un doctype o una raíz HTML; también puedes forzar el modo XML o HTML.

  2. 2

    Escribe tu XPath

    Absoluta (`/library/book`) o relativa (`//div[@class='card']`), cualquier expresión XPath 1.0.

  3. 3

    Evalúa

    El motor XPath de tu navegador ejecuta la consulta en local; no se envía nada a ningún servidor.

  4. 4

    Inspecciona los resultados

    Cada coincidencia muestra el tipo de nodo, los atributos, el texto recortado y el marcado serializado; se listan hasta 200 coincidencias.

Lo esencial de XPath 1.0

Expresión Qué selecciona
/books/book Los <book> hijos de la raíz <books>
//book Todos los <book> en cualquier punto del documento
//book[@id='42'] Los <book> con atributo id igual a 42
//book[1] El primer <book> de cada padre (no del documento)
(//book)[1] El primer <book> de todo el documento
//book[title='1984'] Los <book> cuyo texto de <title> es “1984”
//book/@id Los atributos id de todos los elementos <book>
//book[position() > 1] Todos los <book> menos el primero
//book[last()] El último <book> de cada padre

Las expresiones escalares también funcionan: count(//book) devuelve un número, string(//title) una cadena y boolean(//book[@id]) verdadero o falso. El probador muestra esos valores directamente en lugar de una lista de nodos.

Ejes habituales más allá de child

  • ancestor::, todos los ancestros
  • following-sibling::, los hermanos posteriores al nodo actual
  • preceding-sibling::, los hermanos anteriores
  • descendant::, todos los descendientes
  • attribute:: (abreviado @), los atributos del nodo actual
  • parent:: (abreviado ..), el elemento padre

Particularidades del HTML

El HTML no es XML estricto, así que el probador lo analiza con tolerancia usando el analizador HTML de tu navegador en lugar del XML estricto. El modo HTML se detecta automáticamente a partir de <!DOCTYPE html> o de una raíz <html>, y puedes forzar cualquiera de los dos modos con el selector de modo de documento. En modo HTML los nombres de etiquetas y atributos se pasan a minúsculas, así que escribe tu XPath en minúsculas: //div[@class], no //DIV[@CLASS].

Espacios de nombres

El XML con espacios de nombres necesita registrar los prefijos:

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

El probador recorre el documento en busca de declaraciones xmlns y registra cada prefijo automáticamente, así que //content:encoded funciona sin más. Un espacio de nombres por defecto (un xmlns="..." a secas) no tiene prefijo en el documento, así que el probador lo asocia al prefijo d: selecciona los <item> de un feed con espacio de nombres por defecto con //d:item. Los espacios de nombres registrados se listan junto a los resultados.

Lo que este probador no evalúa

Los navegadores evalúan XPath 1.0, el mismo dialecto que usa la mayoría de las herramientas de scraping. Las funciones de XPath 2.0 y posteriores, como matches(string, regex), tokenize(string, delimiter), las expresiones for ... return y los operadores de secuencias, no forman parte de él; las encontrarás en las cadenas de herramientas de XSLT 2.0/3.0. XPath 1.0 sigue siendo la opción más portable para el scraping web.

Consejos para probar

  • Empieza en general y ve acotando. Primero //div, luego //div[@class] y después el valor concreto de la clase.
  • Revisa las declaraciones de espacios de nombres. La mayoría de los “¿por qué mi XPath no devuelve nada?” son espacios de nombres; mira la lista de espacios de nombres registrados.
  • Cuidado con las mayúsculas. XML distingue mayúsculas de minúsculas. El modo HTML pasa los nombres a minúsculas.
  • Prueba string() al extraer texto. //p/text() y string(//p) difieren cuando hay marcado anidado.

Preguntas frecuentes

No, solo XPath. La mayoría de los navegadores admiten ambos mediante document.querySelectorAll (CSS) y document.evaluate (XPath). Usa el que resulte más claro para cada tarea.

El análisis de HTML pasa los nombres de etiquetas y atributos a minúsculas. Asegúrate de que tu XPath usa minúsculas: //div[@class], no //DIV[@CLASS]. Comprueba también el modo: forzar XML sobre un HTML poco estricto falla con un error de análisis, mientras que el modo HTML lo analiza con tolerancia.

Los prefijos declarados en el documento se registran automáticamente para tu expresión. Un espacio de nombres por defecto se asocia al prefijo d, de modo que //d:item selecciona los elementos <item> de un documento con espacio de nombres por defecto. Las asociaciones activas se listan junto a los resultados.

No. El documento y la expresión los evalúa el propio motor XPath de tu navegador y no se envían a nuestro servidor, no se almacenan ni se añaden a la dirección de la página; solo permanecen en la sesión de este navegador para que la vista de varios pasos pueda mostrar tus resultados.

Herramientas relacionadas