J'ai ce genre de résultat venant d'une réponse de savon dans la mule 4.

{ body:<web:getRoutesResponse xmlns:web="http://www.example.org/Bookings/"> <out><![CDATA[<?xml version="1.0"encoding="utf-8"?><ROUTELIST><ROUTEINFO> <ORIGIN>MY-KUL</ORIGIN><DESTINATION>SG-BEU</DESTINATION><ROUTEINFO></ROUTELIST>]]></out> </web:getRoutesResponse> , headers: [], attachments: [] }

Je veux faire dans cette sortie JSON qui dispose d'une gamme d'origine et de destination

[ { "origin": "MY-KUL", "destination": "SG-BEU" } ]

0
Jayson Mendoza 7 mai 2021 à 04:49

2 réponses

Meilleure réponse

Le contenu de cet élément CDATA est une représentation textuelle d'un XML. Pour Dataweave, il ne s'agit que de texte. Vous pouvez utiliser lire () pour analyser comme xml, puis le traiter normalement.

Par exemple quelque chose comme

%dw 2.0
output application/json
---
read(payload.body.out, "application/xml").ROUTELIST.*ROUTEINFO

Vous devrez peut-être mapper le résultat si vous voulez que les balises soient en minuscules.

0
aled 7 mai 2021 à 03:04

Vous pouvez essayer avec quelque chose comme ça. Sur les mêmes lignes que la réponse précédente d'Ale, mais utilise le balayage pour rechercher du contenu entre certains modèles de texte.

Saisie

{
    "body": "<web:getRoutesResponse xmlns:web=\"http: //www.example.org/Bookings/\"> <out><![CDATA[<?xml version=\"1.0\"encoding=\"utf-8\"?><ROUTELIST><ROUTEINFO> <ORIGIN>MY-KUL</ORIGIN><DESTINATION>SG-BEU</DESTINATION><ROUTEINFO></ROUTELIST>]]></out> </web:getRoutesResponse>",
    "headers": [],
    "attachments": []
}

Script

%dw 2.0
output application/json
var a = read(payload.body, "application/xml").getRoutesResponse.out
---
[{
    origin: (a scan(/\<ORIGIN>(.+?)\<\/ORIGIN>/))[0][1],
    desination: (a scan(/\<DESTINATION>(.+?)\<\/DESTINATION>/))[0][1]
}]

Sortie

[
  {
    "origin": "MY-KUL",
    "desination": "SG-BEU"
  }
]
0
Salim Khan 7 mai 2021 à 05:48