Cómo analizar XML en Power Automate usando XPath

Prefiero usar datos JSON en un flujo porque es fácil trabajar con ellos. Pero no siempre puede elegir sus datos de origen y esta vez tenía una API Rest que devolvía datos XML en lugar de JSON.

Si está trabajando con JSON, simplemente puede usar una acción Parse JSON para extraer los datos, con XML necesitaremos realizar un par de pasos adicionales y usar XPath para extraerlos.

Primero le mostraré cómo funcionan los conceptos básicos de las expresiones XPath y luego cómo usarlas en combinación con una API.

Índice

Analizando XML con XPath

Por lo tanto, XPath es un lenguaje de consulta generalmente utilizado para extraer datos (nodos) de un documento XML. En Power Automate podemos usar la función XPath dentro de un Componer acción.

Para este ejemplo, usaré una parte del archivo XML de muestra de Microsoft.

<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
   <book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
   </book>
</catalog>

Para fines de prueba, estoy usando un flujo con un disparador manual. Primero, creamos un Componer acción y agregue una parte del XML de Libros en las entradas. Intente siempre cambiar el nombre de sus acciones a algo que signifique completo, en este caso, datos XML, por ejemplo.

Flujo de datos de muestra XML

Ahora XPath es realmente poderoso. Por ejemplo, podemos obtener todos los libros y procesar cada libro más adelante en el flujo. Pero también podemos obtener con una función todas las fechas de publicación.

Selección de nodos con XPath

Entonces, antes de continuar con el Flujo en Power Automate, primero echemos un vistazo de cerca a la sintaxis de XPath.

En la siguiente tabla, he enumerado un par de las expresiones más utilizadas y cuál sería el resultado basado en el XML de ejemplo.

ExpresiónResultado
/catálogo/libroSeleccione todos los nodos con el libro de nombres del catálogo de elementos raíz. Si comienza la ruta con / entonces siempre es la ruta absoluta
catálogo/libroEl mismo resultado es el anterior, pero el catálogo ahora también puede ser un elemento secundario de otro elemento.
//autorSeleccionar todos los elementos de autor independientemente de su ubicación
libro//autorSeleccione todos los elementos de autor que sean secundarios del elemento de libro, sin importar dónde se encuentren.
//@identificaciónDevuelve todos los atributos de identificación (en este caso, la identificación del elemento del libro)
//libro[1]Seleccione el primer libro. Usar [last()] para seleccionar el último elemento.
//libro[price>20.00]Seleccione todos los elementos del libro con un elemento de precio superior a 20,00

Uso de XPath en Power Automate

Para usar XPath en un flujo, creamos una nueva acción Componer. Haga clic en el campo de entrada y seleccione la expresión.

La estructura de la función es la siguiente:

xpath(<XML data>, <xpath expression>)

Entonces, para seleccionar todos los elementos del libro del XML, podemos usar la siguiente expresión:

xpath(
    xml(
        outputs('XML_Data')
    ),
    '//book'
)
  1. Así que tenemos que convertir el XML datos a un formulario XML válido. Por eso usamos xml().
  2. Entonces obtenemos las salidas del Acción de redacción XML_Data.
  3. Y en la última parte, tenemos nuestra Expresión XPath //book
Expresión y xml de Microsoft Flow Xpath

Consejo

Si se pregunta por qué mi editor de expresiones se ve diferente al suyo, consulte este artículo sobre cómo habilitar el nuevo Editor de expresiones en Power Automate.

El resultado de la expresión anterior son todos los elementos del libro como este:

<book id="bk101">
  <author>Gambardella, Matthew</author>
  <title>XML Developer's Guide</title>
  <genre>Computer</genre>
  <price>44.95</price>
  <publish_date>2000-10-01</publish_date>
  <description>An in-depth look at creating applications 
      with XML.</description>
</book>

Si desea ver el resultado de su expresión, simplemente puede agregar una acción de redacción y usar la expresión XML(item()) en eso.

Iterando sobre los resultados

los Obtener todos los libros Las acciones que creamos devolverán una matriz con los resultados. Para procesar los libros, podemos usar un Aplicar a cada acción.

Dentro de for each, agregamos otra acción Redactar para obtener el autor, por ejemplo. En este caso, no quiero crear el elemento, pero el valor actual. usamos el string función para obtener el valor real del nodo:

xpath(
    item(),
    'string(//author)'
)

Aquí usamos //, pero también puede usar /book/author o book/author. En este caso, todo devolvería los mismos resultados.

Expresión xpath de Power Automate

Uso de una API XML en Power Automate

Con Flow, puede obtener fácilmente datos de una API con la acción HTTP (que requiere Flow Premium). La acción HTTP devolverá los resultados de la llamada a la API en su salida del cuerpo.

Entonces, para usar estos datos XML, podemos usar la siguiente expresión XPath:

xpath(
    xml(
        body('HTTP')
    ),
    '/catalog/books'
)

Convertimos la salida de la API a XML válido y podemos usar nuestra expresión XPath para obtener los elementos correctos que necesitamos.

Contar filas XML en Power Automate

Hay dos opciones para contar filas XML en Power Automate. Podemos usar XPath o contar la longitud de un resultado XPath.

Cuando usamos XPath, básicamente usamos los mismos métodos de selección que antes, pero lo envolvemos en una función de conteo:

xpath(
    xml(
        outputs('XML_Data')
    ),
    'count(//author)'
)

La longitud es una función estándar que se puede usar para medir la longitud de cualquier resultado en Power Automate.

En este caso, medimos la longitud de una expresión XPath utilizada anteriormente.

length(outputs('Get_all_books'))

Problema común con XPath en Flow

Entonces, cuando comencé a usar la expresión XPath, me encontré con un par de problemas bastante comunes que pueden ser realmente frustrantes si no los conoce.

Haga clic para descargar

Si se equivocó en la expresión, no verá ningún error. por ejemplo, el las expresiones distinguen entre mayúsculas y minúsculas. Asi que //Books no devolverá ningún dato. Cuando pruebe su flujo, verá en la entrada y salida de la expresión XPath Haga clic para descargar.

Corchetes vacíos de Flow XPath

Si descarga o abre el archivo, todo lo que ve son corchetes vacíos []. Básicamente, esto significa que su expresión no funciona como esperaba, no encontró ningún resultado.

Si la expresión funciona, entonces en los campos de salida verás algo como esto:

[
  {
    "$content-type": "application/xml;charset=utf-8",
    "$content": "PGJvb2sgaWQ9ImJrMTAxIj4NCiAgPGF1dGhvcj5HYW1iYXJkZWxsYSwgTWF0dGhldzwvYXV0aG9yPg0KICA8dGl0bGU+WE1MIERldmVsb3BlcidzIEd1aWRlPC90aXRsZT4NCiAgPGdlbnJlPkNvbXB1dGVyPC9nZW5yZT4NCiAgPHByaWNlPjQ0Ljk1PC9wcmljZT4NCiAgPHB1Ymxpc2hfZGF0ZT4yMDAwLTEwLTAxPC9wdWJsaXNoX2RhdGU+DQogIDxkZXNjcmlwdGlvbj5BbiBpbi1kZXB0aCBsb29rIGF0IGNyZWF0aW5nIGFwcGxpY2F0aW9ucyANCiAgICAgIHdpdGggWE1MLjwvZGVzY3JpcHRpb24+DQo8L2Jvb2s+"
  },
  {
    "$content-type": "application/xml;charset=utf-8",
    "$content": "PGJvb2sgaWQ9ImJrMTAyIj4NCiAgPGF1dGhvcj5SYWxscywgS2ltPC9hdXRob3I+DQogIDx0aXRsZT5NaWRuaWdodCBSYWluPC90aXRsZT4NCiAgPGdlbnJlPkZhbnRhc3k8L2dlbnJlPg0KICA8cHJpY2U+NS45NTwvcHJpY2U+DQogIDxwdWJsaXNoX2RhdGU+MjAwMC0xMi0xNjwvcHVibGlzaF9kYXRlPg0KICA8ZGVzY3JpcHRpb24+QSBmb3JtZXIgYXJjaGl0ZWN0IGJhdHRsZXMgY29ycG9yYXRlIHpvbWJpZXMsIA0KICAgICAgYW4gZXZpbCBzb3JjZXJlc3MsIGFuZCBoZXIgb3duIGNoaWxkaG9vZCB0byBiZWNvbWUgcXVlZW4gDQogICAgICBvZiB0aGUgd29ybGQuPC9kZXNjcmlwdGlvbj4NCjwvYm9vaz4="
  },
]

Esto es básicamente dos documentos XML en una matriz. Para ver el contenido puedes usar una acción de redacción y la expresión XML(item()).

Terminando

Espero que este artículo lo haya ayudado a comenzar a usar XPath en Power Automate. Tenga en cuenta que las expresiones distinguen entre mayúsculas y minúsculas y, si no funciona, vuelva a verificar sus rutas.

También te pueden interesar los siguientes artículos:

  • Actualización del editor de Power Automate
  • Introducción a las expresiones de Power Automate
  • Aprendizaje de Power Automate – parte 1
  • Aprendizaje de Power Automate – parte 2


Si quieres conocer otros artículos similares a Cómo analizar XML en Power Automate usando XPath puedes visitar la categoría Office 365.

Artículos de interés

Subir

Si continuas utilizando este sitio aceptas el uso de cookies. Más información