Ir al contenido

XML Query Text

Tipo: xml-query-text  ·  Paquete: XML Activities v1.1.1  ·  Salida: string

Evalúa una expresión XPath sobre un XML y devuelve el primer valor de texto que coincide. Es la forma de extraer un dato de un documento XML: el número de una factura, el nombre de un cliente, un total.

Aplica el xpath al xml y devuelve el texto de la primera coincidencia en el orden del documento:

  • Un elemento: su texto. Si tiene hijos, el texto de todos sus descendientes, unido.
  • Un atributo (//cbc:PayableAmount/@currencyID): su valor.
  • Un valor calculado (count(//cac:InvoiceLine), sum(//Total), una comparación): el número (2, 1785000.5) o true/false.

Si no hay ninguna coincidencia devuelve null (no falla) y deja un aviso en el log. Ver XPath en una cucharada.

Los prefijos de namespace del documento funcionan directamente (//cbc:ID) y el namespace por defecto se escribe con d: (/d:Invoice). Ver Namespaces.

El xml puede ser también un XML embebido como texto, por ejemplo el contenido de un CDATA que sacaste con otra consulta. Ver XML dentro de XML.

No modifica el xml de entrada.

ParámetroTipoPor defectoDescripción
xmlstring—El texto XML (de Read XML o de otra consulta). También un XML embebido, como el contenido de un CDATA.
xpathstring—La expresión XPath, ej. //Factura/Numero, //cbc:ID o //Total/@moneda.
ParámetroTipoPor defectoDescripción
namespacesDictionary—Prefijos extra o que reemplazan a los del documento (prefijo → URI). Los declarados en el XML se registran solos. Desde la versión 1.1.0.
defaultPrefixstring"d"Prefijo con que se escribe en el XPath el namespace por defecto del documento (xmlns="…"). Vacío equivale a "d". Desde la versión 1.1.0.

Devuelve un string con el texto de la primera coincidencia, o null si el XPath no encuentra nada. Un elemento vacío (<Nota/>) devuelve "", no null: así distingues “no está” de “está vacío”.

MensajeCausa y solución
'xml' es obligatorio. / 'xpath' es obligatorio.El parámetro quedó vacío o su expresión dio null (por ejemplo, una consulta anterior no encontró el CDATA). Comprueba la variable con If antes.
La expresión XPath «…» no es válida: …Sintaxis incorrecta en el XPath.
El prefijo 'x:' no está declarado en el XML ni en 'namespaces'. Prefijos disponibles: ….Usa uno de los prefijos de la lista o defínelo en namespaces.
Mensaje del analizador XML / DTD / tamaño / anidamientoEl xml no es válido o supera los límites. Ver Errores comunes del paquete.

Que no haya coincidencias no es un error: revisa si la salida es null.

Read XML path = ruta → output: xml
XML Query Text xml = xml xpath = "//Factura/Total" → output: total
If condition = total == null
└─ then:
Throw message = "La factura no trae total"
Log message = "Total de la factura: " + total

Con namespaces (factura UBL):

XML Query Text xml = factura xpath = "//cac:LegalMonetaryTotal/cbc:PayableAmount" → output: total
XML Query Text xml = factura xpath = "//cac:LegalMonetaryTotal/cbc:PayableAmount/@currencyID" → output: moneda
XML Query Text xml = factura xpath = "count(//cac:InvoiceLine)" → output: numLineas