Ir al contenido
ESP

Selector múltiple

Dado el siguiente payload de entrada:

<?xml version="1.0"?>
<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>
<book id="bk103">
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology
society in England, the young survivors lay the
foundation for a new society.</description>
</book>
</catalog>

Escribí una transformación DataWeave que produzca la siguiente salida en JSON:

{
"authors": [
"Gambardella, Matthew",
"Ralls, Kim",
"Corets, Eva"
]
}
  • En el caso de xml donde se suelen repetir las etiquetas, podemos utilizar el selector múltiple .* para obtener esas etiquetas repetidas en el mismo nivel.
  • El selector múltiple, siempre devolverá un Array.

🔒🔓Ver solución
%dw 2.0
output application/json
---
{
authors: payload.catalog.*book.author
}

Notas:

  1. Como book es una etiqueta que se repite varias veces, podemos utilizar payload.catalog.*book para obtener todos los libros. Ya que si utilizáramos solamente payload.catalog.book obtendríamos el primer libro.
  2. Como payload.catalog.*book devuelve un Array de objetos, simplemente podemos agregarle .author que retornará todos los valores cuya clave sea Author generando el nuevo Array que estamos esperando.
{Code mat;}

Aprendé MuleSoft: cursos, ejercicios y exámenes. Gratis y sin registro.