La función FILTRAR.XML en Excel es una herramienta potente diseñada para devolver datos específicos de un contenido en formato XML utilizando una expresión XPath. Es fundamental para usuarios que trabajan con importación de datos externos, APIs web o que necesitan extraer información estructurada de cadenas de texto complejas.
Aunque su uso natural es procesar respuestas de servicios web, también se ha popularizado en versiones anteriores de Excel como un método ingenioso para separar textos antes de la llegada de funciones modernas de matriz dinámica.
Sintaxis
=FILTRAR.XML(xml; xpath)
La función requiere dos argumentos obligatorios para navegar por la estructura jerárquica del XML:
- xml obligatorio. Una cadena de texto que contiene el XML válido. Puede ser una referencia a una celda que contiene el texto, el resultado de otra función (como SERVICIOWEB) o el propio texto XML escrito entre comillas.
- xpath obligatorio. Una cadena de texto que representa la consulta XPath estándar para localizar el dato deseado dentro del XML (por ejemplo, «//precio» o «/catalogo/producto/nombre»).
Ejemplos
Ejemplo 1: Extracción básica Imaginemos que tenemos una cadena XML simple en la celda A1 y queremos extraer el contenido de la etiqueta «usuario».
| A | |
|---|---|
| 1 | <datos><usuario>Ana</usuario><id>99</id></datos> |
=FILTRAR.XML(A1; "//usuario")
Resultado esperado: «Ana». La consulta XPath //usuario busca la etiqueta en cualquier lugar de la estructura.
Ejemplo 2: Uso con SERVICIOWEB Este es el caso de uso más común: obtener datos externos (como el clima o cotizaciones) y extraer un valor concreto.
=FILTRAR.XML(SERVICIOWEB("http://api.ejemplo.com/datos.xml"); "/respuesta/valor")
En este caso, primero se descarga el XML de la URL y luego FILTRAR.XML busca la ruta específica /respuesta/valor.
Ejemplo 3: Truco para dividir texto (Split) Antes de que existiera la función DIVIDIR.TEXTO, esta función se usaba para separar palabras por comas convirtiendo el texto en un XML falso.
| A | |
|---|---|
| 2 | Rojo,Verde,Azul,Amarillo |
=FILTRAR.XML("<t><s>" & SUSTITUIR(A2; ","; "</s><s>") & "</s></t>"; "//s")
Resultado: Devuelve una matriz vertical con «Rojo», «Verde», «Azul» y «Amarillo». La fórmula sustituye las comas por etiquetas de cierre y apertura </s><s> para crear una estructura XML válida que Excel puede leer.
Observaciones
El argumento xml tiene un límite de 32.767 caracteres. Si la respuesta de un servicio web excede este límite, la función devolverá un error.
La función no soporta bien los espacios de nombres (namespaces) complejos en XML. A menudo es necesario limpiar el XML o usar comodines en el XPath para evitar errores de lectura si el XML original es muy estricto con los atributos xmlns.
Errores comunes
- #¡VALOR! Ocurre si el argumento
xmlno contiene un XML válido (etiquetas mal cerradas, estructura rota) o si se utilizan espacios de nombres no gestionados. - #N/A Aparece cuando la consulta
xpathes válida sintácticamente pero no encuentra ninguna coincidencia dentro del XML proporcionado.
Disponibilidad por versión de Excel
Disponible desde: Excel 2013 para Windows. También disponible en Excel 2016, 2019, 2021 y Excel para Microsoft 365 (sólo Windows).
Importante: Esta función no está disponible en Excel para Mac ni en Excel para la Web, debido a su dependencia de librerías del sistema operativo Windows para el análisis XML.
Compatibilidad
| Software | Compatibilidad | Notas | Alternativa |
|---|---|---|---|
| Microsoft Excel (Windows) | ✔️ | Disponible desde v2013. | — |
| Microsoft Excel (Mac / Web) | ❌ | Restricción de SO/Plataforma. | — |
| Google Sheets | ❌ | Usa una lógica diferente combinada. | IMPORTXML (combina fetch + parse) |
| LibreOffice Calc | ✔️ | Soporta FILTERXML desde v4.2. | — |
| OpenOffice Calc | ❌ | No confirmado. | No disponible |
| WPS Office Spreadsheets | ❌ | Generalmente no soporta funciones de Web Scraping. | No disponible |
| Apple Numbers | ❌ | No tiene motor de análisis XML nativo en fórmulas. | No disponible |
Funciones Relacionadas
- SERVICIOWEB: Imprescindible para descargar el contenido XML de una URL antes de filtrarlo.
- CODIF.URL: Útil para codificar parámetros que se enviarán dentro de la URL al solicitar el XML.
- DIVIDIR.TEXTO: La alternativa moderna y nativa para separar textos sin recurrir a trucos de XML.
