在mule 4中将带有CDATA的SOAP响应转换为JSON

在mule 4中将带有CDATA的SOAP响应转换为JSON,mule,dataweave,Mule,Dataweave,我从mule 4中的soap响应中得到了这种结果 {body:MY-KULSG-BEU]]>,标题:[],附件:[]} 我想在这个json输出中创建一个源和目标数组 [{“origin”:“MY-KUL”,“destination”:“SG-BEU”}]该CDATA元素的内容是XML的文本表示形式。对于DataWeave来说,它只是文本。可以使用read()将其解析为XML,然后正常处理 比如说 %dw 2.0 output application/json --- read(payload.b

我从mule 4中的soap响应中得到了这种结果

{body:MY-KULSG-BEU]]>,标题:[],附件:[]}

我想在这个json输出中创建一个源和目标数组


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

该CDATA元素的内容是XML的文本表示形式。对于DataWeave来说,它只是文本。可以使用read()将其解析为XML,然后正常处理

比如说

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

若您想要小写的标记,您可能需要映射结果。

您可以尝试使用类似的方法。与Ale的上一个答案相同,但使用扫描在某些文本模式之间搜索内容

输入

{
    "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": []
}
%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]
}]
[
  {
    "origin": "MY-KUL",
    "desination": "SG-BEU"
  }
]