1. Inicio
  2. Blog
  3. Cómo usar XPath para encontrar datos en XML (con ejemplos)
Herramientas XML

Cómo usar XPath para encontrar datos en XML (con ejemplos)

Publicado el 30 de octubre de 2026 · 7 min de lectura

XPath es un pequeño lenguaje para señalar partes de un documento XML, un poco como una ruta señala un archivo en tu ordenador. En lugar de leer todo el archivo, escribes //book/title y obtienes todos los títulos de libros. Se usa en XSLT, en herramientas de pruebas como Selenium, en importaciones de datos, en archivos de configuración y en casi cualquier lenguaje de programación que lea XML.

Esta guía recorre el XPath que de verdad vas a usar, con resultados reales, usando el probador de XPath gratuito. Todos los ejemplos funcionan sobre el propio Ejemplo del probador, así que puedes seguirlos paso a paso.

El XML de ejemplo

Una pequeña tienda con dos libros:

<shop name="Corner Books">
  <book id="bk101" lang="en">
    <title>XML &amp; JSON for Everyone</title>
    <author>Ada Lovelace</author>
    <price currency="EUR">29.95</price>
    <inStock>true</inStock>
    <tag>data</tag>
    <tag>web</tag>
  </book>
  <book id="bk102" lang="de">
    <title>Daten für alle</title>
    <author>Alan Turing</author>
    <price currency="EUR">24.50</price>
    <inStock>false</inStock>
    <tag>data</tag>
    <discount/>
  </book>
</shop>

Cómo probar una expresión XPath

  1. Abre el probador de XPath. Haz clic en Ejemplo para cargar la tienda de arriba, o pega tu propio XML o abre un archivo.
  2. Escribe una expresión en Expresión XPath. La línea de debajo dice ✓ Expresión XPath válida en cuanto está completa. Los botones de Prueba: rellenan ejemplos listos.
  3. Pulsa Intro o haz clic en Ejecutar XPath. Verás cuántos nodos coinciden, cada uno con su tipo (elemento, atributo, texto…) y su línea; haz clic en el número de línea para saltar a ella en el XML.

Las piezas básicas

  • / baja un nivel desde donde estás; al principio significa “desde la raíz del documento”.
  • // busca a cualquier profundidad. //title encuentra los títulos estén donde estén.
  • @ indica un atributo: @id es el atributo id.
  • [ ] filtra: solo se quedan los nodos que cumplen la condición.
  • * coincide con cualquier elemento, . es el nodo actual y .. su padre.

Seleccionar datos

  • //book/title: el elemento title de cada libro → 2 coincidencias: “XML & JSON for Everyone” y “Daten für alle”
  • //title/text(): solo el texto dentro de los títulos → los mismos dos textos, sin etiquetas
  • //book/@id: el atributo id de cada libro → bk101 y bk102
  • /shop/@name: el atributo name del elemento superior → Corner Books
  • //price/@currency: la moneda de cada precio → EUR y EUR

Filtrar con condiciones

  • //book[@lang='en']/title: títulos de los libros cuyo atributo lang es “en” → XML & JSON for Everyone
  • //book[price > 25]/title: títulos de los libros que cuestan más de 25 → XML & JSON for Everyone
  • //book[tag='web']/author: autores de los libros con la etiqueta “web” → Ada Lovelace
  • //book[inStock='true']/title: libros disponibles → XML & JSON for Everyone
  • //book[discount]/@id: libros que tienen un elemento discount → bk102
  • //title[contains(., 'JSON')]: títulos que contienen la palabra JSON → XML & JSON for Everyone
  • //book[1]/author: el autor del primer libro → Ada Lovelace
  • //book[last()]/title: el título del último libro → Daten für alle
  • //*[not(node())]: elementos vacíos, que a menudo son errores → <discount/>

Las condiciones se combinan con and y or, por ejemplo //book[@lang='en' and price > 25].

Contar y sumar

XPath también puede devolver un solo valor en lugar de nodos:

  • count(//book): cuántos libros hay → 2
  • sum(//price): la suma de todos los precios → 54.45
  • boolean(//book[price > 100]): ¿hay algún libro de más de 100? → false

Dos errores que comete casi todo el mundo

1. La trampa del espacio de nombres por defecto

Muchos archivos reales, como los feeds RSS y Atom, los sitemaps, los archivos de Office o los mensajes SOAP, empiezan con un espacio de nombres por defecto:

<feed xmlns="http://www.w3.org/2005/Atom">
  <entry><title>Hello</title></entry>
</feed>

Aquí //entry/title no encuentra nada, porque todos los elementos pertenecen a ese espacio de nombres y un nombre simple no coincide. Busca por el nombre local: //*[local-name()='entry']/*[local-name()='title']. El probador de XPath detecta esta situación y te avisa.

2. Funciones de versiones más nuevas de XPath

Los navegadores, Selenium y la mayoría de bibliotecas usan XPath 1.0. Las funciones de XPath 2.0 y posteriores, como lower-case(), matches() o ends-with(), no existen ahí. Para ignorar mayúsculas y minúsculas en XPath 1.0 usa translate(), y para comprobar cómo termina un valor compara un substring().

Detalles más pequeños

  • Las posiciones empiezan en 1, no en 0: //book[1] es el primer libro.
  • Las comparaciones de texto son exactas, con mayúsculas, minúsculas y espacios: [tag='Web'] no coincide con “web”.
  • Para poner comillas dentro de comillas, alterna el tipo: //book[title="Daten für alle"] o [title='…'].

Más herramientas XML

¿Se sube mi XML?

No. El XPath se ejecuta en tu navegador, así que tu XML nunca sale de tu dispositivo. Nuestro servidor solo registra que hubo una prueba, para el límite diario.

Preguntas frecuentes

¿Qué versión de XPath usa el probador?

XPath 1.0, la que llevan los navegadores y usan Selenium y la mayoría de bibliotecas, así que una expresión que funciona aquí funciona también allí.

¿Puedo probar XPath en una página web (HTML)?

Este probador necesita XML bien formado, y la mayoría de páginas web no lo son. Para una página abierta, usa la consola de las herramientas de desarrollo del navegador: en Chrome y Edge, $x("//h1") ejecuta un XPath sobre la página.

¿Por qué mi expresión no devuelve nada?

Comprueba primero si hay un espacio de nombres por defecto, y después las mayúsculas y los espacios en las comparaciones de texto. Empieza con una ruta corta como //book y añade un paso cada vez.