Saltar al contenido principal

Consulta por XPath

Configuración actual de la tarea Consulta XPath en el Diseñador de Flujos de Trabajo

La Tarea Consulta por XPath es una herramienta especializada para extraer datos de un documento XML. Recibe como entrada un texto XML proveniente de una Tarea anterior y aplica una expresión XPath (Lenguaje de Ruta XML) para seleccionar nodos o valores específicos dentro de ese documento.

Es una Tarea fundamental para procesar las respuestas de llamadas SOAP, analizar archivos de configuración XML o extraer información de cualquier dato estructurado en formato XML.

Configuración

La configuración se centra en la definición de la expresión de búsqueda y en la gestión opcional de los namespaces.

  • Contenido XML: El contenido del documento XML del cual se quieren extraer datos.
  • Expresión XPath: El corazón de la Tarea. En este campo se debe insertar la expresión XPath que define qué elementos se desean seleccionar del documento XML.
  • Namespaces (opcional): Esta sección es fundamental en el procesamiento de documentos XML que utilizan namespaces, definidos a través de atributos como xmlns o xmlns:prefix.

Ejemplo de Uso (Sin Namespace)

Consideremos un archivo XML simple, como el de una biblioteca, que no utiliza namespaces:

<?xml version="1.0" encoding="UTF-8"?>
<libreria>
<libro id="1">
<titolo>Il Signore degli Anelli</titolo>
<autore>J.R.R. Tolkien</autore>
<anno>1954</anno>
</libro>
<libro id="2">
<titolo>1984</titolo>
<autore>George Orwell</autore>
<anno>1949</anno>
</libro>
<libro id="3">
<titolo>Il Nome della Rosa</titolo>
<autore>Umberto Eco</autore>
<anno>1980</anno>
</libro>
</libreria>

Objetivo: Extraer solo los títulos de los libros publicados después de 1950.

Configuración de la Tarea:

  • Expresión XPath: Se inserta la expresión: /biblioteca/libro[año > 1950]/título
  • Namespaces: La sección se deja vacía.

Resultado Esperado: El parámetro result de la Tarea contendrá un nuevo documento XML con los dos títulos que satisfacen la condición:

<titolo>Il Signore degli Anelli</titolo>
<titolo>Il Nome della Rosa</titolo>

Ejemplo de Uso (Con Namespace)

Si bien el ejemplo anterior es válido para XML simples, esta tarea también gestiona XML en los que los elementos pertenecen a un namespace predefinido, requiriendo de asociar manualmente un prefijo al namespace para poder utilizar correctamente XPath.

Consideremos una versión del XML que utiliza un namespace:

<libreria xmlns="http://example.com/libri">
<libro>
<anno>1321</anno>
<titolo>La Divina Commedia</titolo>
<autore>Dante Alighieri</autore>
</libro>
<libro>
<anno>1600</anno>
<titolo>Amleto</titolo>
<autore>William Shakespeare</autore>
</libro>
<libro>
<anno>1980</anno>
<titolo>Il Nome della Rosa</titolo>
<autore>Umberto Eco</autore>
</libro>
</libreria>

En este caso, una expresión XPath como /biblioteca/libro/título fallará, porque los nodos no se llaman "biblioteca" o "libro", sino que están cualificados por el namespace http://example.com/libros.

Uso de Prefijos y Namespaces

Si quisieramos extraer solo el título del libro publicado después de 1950, de este XML con namespace, debemos primero "enseñar" a la Tarea qué significa el prefijo que utilizaremos (ej. ns).

En la sección Namespaces, añadimos una fila:

PrefijoNamespace
nshttp://example.com/libros

Ahora podemos escribir la expresión XPath utilizando el prefijo que hemos registrado: //ns:libro[ns:anno > 1950]/ns:titolo

Resultado Esperado

El parámetro result de la Tarea contendrá un nuevo documento XML con el solo título que satisface la condición, preservando su namespace original:

<ns:titolo xmlns:ns="http://example.com/libri">Il Nome della Rosa</ns:titolo>

Si no se establece el prefijo y el namespace, el parámetro result contendrá en cambio un mensaje de error: Advertencia: DOMXPath::query(): Prefijo de namespace no definido

Nota

Cuando los elementos XML tienen un prefijo explícito:

<ns1:libreria xmlns:ns1="http://example.com/libri">
<ns1:libro>
<ns1:anno>1980</ns1:anno>
<ns1:titolo>Il Nome della Rosa</ns1:titolo>
</ns1:libro>
</ns1:libreria>

No es necesario asociar manualmente un prefijo al espacio de nombres. De hecho, XPath puede utilizar directamente el prefijo ya presente (ns1) para identificar los elementos, simplificando la escritura de las consultas en comparación con los espacios de nombres predeterminados sin prefijo.

Parámetros de Salida

La Tarea expone un único Parámetro de Salida principal:

  • result: Contiene el resultado de la consulta XPath o un mensaje de error.
    • Si la consulta devuelve un único valor de texto simple (por ejemplo, el contenido de una etiqueta <titolo>), el result contendrá directamente ese valor como cadena.
    • Si la consulta devuelve uno o más nodos XML (estructuras complejas), el result contendrá un nuevo documento XML bien formado que contiene solo los nodos encontrados.
  • resultJson: representa el resultado de la ejecución de la tarea en formato JSON, incluyendo información general, configuraciones y detalles sobre la ejecución.