在 mule 4 中将带有 CDATA 的 SOAP 响应转换为 JSON
Convert a SOAP response with CDATA to JSON in mule 4
我有这种来自 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: [] }
我想在这个 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"
}
]
我有这种来自 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: [] }
我想在这个 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"
}
]