La función FILTROXML es una de las herramientas más potentes y versátiles de Excel para el análisis y extracción de datos. Permite analizar cadenas de texto en formato XML (Lenguaje de Marcado Extensible) y extraer información específica utilizando expresiones XPath (Lenguaje de Rutas XML).
Su uso principal es la extracción de datos desde documentos XML o, en combinación con la función SERVICIOWEB, para realizar «web scraping» y obtener datos directamente desde páginas web o APIs que devuelvan contenido en formato XML.
Sintaxis
=FILTROXML(xml, xpath)
La función FILTROXML tiene los siguientes argumentos:
- xml: Una cadena de texto con formato XML válido, o una referencia a una celda que contenga dicho texto. Obligatorio.
- xpath: Una cadena de texto que representa una consulta en lenguaje XPath. Esta consulta indica qué nodos o valores se deben extraer del argumento
xml. Obligatorio.
Ejemplos
Ejemplo 1: Extraer un valor específico de un XML simple
Supongamos que la celda A1 contiene el siguiente texto XML. Queremos extraer el título del libro.
| A | |
|---|---|
| 1 | <catalogo><libro id=»bk101″><autor>Gambardella, Matthew</autor><titulo>XML Developer’s Guide</titulo><precio>44.95</precio></libro></catalogo> |
=FILTROXML(A1, "/catalogo/libro/titulo")
Resultado: XML Developer's Guide
La expresión XPath /catalogo/libro/titulo navega por la estructura del XML hasta encontrar el nodo <titulo> y devuelve su contenido.
Ejemplo 2: Extraer un atributo de un nodo
Usando el mismo XML del ejemplo anterior, esta vez queremos obtener el valor del atributo «id» del nodo <libro>.
=FILTROXML(A1, "/catalogo/libro/@id")
Resultado: bk101
En XPath, el símbolo @ se utiliza para seleccionar atributos en lugar de nodos.
Ejemplo 3: Extraer múltiples elementos (Desbordamiento en matrices dinámicas)
Si el XPath coincide con varios nodos, y estás usando una versión de Excel con matrices dinámicas (Excel 365, 2021), el resultado se desbordará en las celdas adyacentes. La celda A1 contiene una lista de frutas en XML.
| A | |
|---|---|
| 1 | <frutas><fruta>Manzana</fruta><fruta>Pera</fruta><fruta>Naranja</fruta></frutas> |
=FILTROXML(A1, "//fruta")
Resultado (en celdas separadas):
- Manzana
- Pera
- Naranja
La expresión //fruta busca todos los nodos llamados <fruta> en cualquier parte del documento.
Ejemplo 4: Uso con SERVICIOWEB para extraer datos de un Feed RSS
Este es uno de los usos más potentes. Podemos extraer los titulares de un feed de noticias en formato RSS (que es un tipo de XML). Combinamos FILTROXML con SERVICIOWEB para obtener los datos de una URL.
=FILTROXML(SERVICIOWEB("https://www.xataka.com/index.xml"), "//item/title")
Resultado: Una lista con los últimos títulos de los artículos publicados en el feed de Xataka. La función devolverá un array dinámico con todos los títulos encontrados.
Observaciones
La función FILTROXML es una herramienta avanzada. Su dominio depende en gran medida del conocimiento del lenguaje de consultas XPath.
El argumento xml tiene una limitación de 32,767 caracteres. Si necesitas procesar archivos XML más grandes, deberás dividirlos o usar otras herramientas como Power Query.
Errores comunes
- #¡VALOR!: Ocurre si el argumento
xmlno es una cadena XML válida o si elxpathcontiene errores de sintaxis (por ejemplo, caracteres no permitidos). - #N/A: Se produce cuando la expresión
xpathes sintácticamente correcta pero no encuentra ninguna coincidencia en el documento XML proporcionado.
Disponibilidad por versión de Excel
La función FILTROXML está disponible en las siguientes versiones:
- Excel 2013 o posterior (Windows)
- Excel 2016 o posterior (Mac)
- Excel para la Web
El comportamiento de desbordamiento automático (matrices dinámicas) para resultados múltiples está disponible de forma nativa en Excel 365 y Excel 2021. En versiones anteriores (2013-2019), podría ser necesario seleccionar un rango de celdas y usar la fórmula como una fórmula de matriz (presionando Ctrl+Shift+Enter).
Compatibilidad
| Software | Compatibilidad | Notas | Alternativa |
|---|---|---|---|
| Microsoft Excel | ✔️ | Disponible desde Excel 2013 (Windows) y 2016 (Mac). | |
| Google Sheets | ❌ | No existe la función FILTROXML como tal. | IMPORTXML (función muy similar y potente). |
| LibreOffice Calc | ✔️ | La función existe y se llama FILTERXML. | |
| OpenOffice Calc | ❌ | No disponible. | |
| WPS Office Spreadsheets | ❌ | No disponible. | |
| Apple Numbers | ❌ | No disponible. |
Funciones Relacionadas
- SERVICIOWEB: Obtiene datos de un servicio web en Internet. Es el complemento perfecto para FILTROXML, ya que proporciona el contenido XML que esta función puede analizar.
