我想将DB记录转换为XML。从DB记录中选择查询将LinkedHashMap作为有效负载。现在我想使用dataweave将其转换为XML。我很陌生,所以有点失落。为了做到这一点,我需要遵循哪些步骤?
谢谢。
答案 0 :(得分:0)
根据Victor的说法,请浏览Dataweave文档,它是Mule中的数据转换组件。
对于您的问题,以下方法将帮助您进行转换。下面的脚本是一个示例,您可以参考将其添加到mule代码中的数据编织组件。
%dw 1.0
%output application/xml
---
payload map {
element: $.columnName_Or_aliasName
}
Map函数将在JSON中迭代数组或复杂的xml或数组。 这里为您的数据库响应,您可以考虑,因为您的数据库结果集中的每一行都将被迭代
答案 1 :(得分:0)
使用DataWeave将Java Map转换为XML:
您可以尝试以下POC:
<sub-flow name="testdataweaveSub_Flow16_MapToXml" doc:description="http://blogs.mulesoft.com/dev/getting-started-with-dataweave-part-1/ Literal Expressions Variable Reference Expressions">
<set-payload value="{ "item_id": "B0002345W45", "item_type": "Item Type 1", "item_type_name": "Item Type 1 Name", "item_name": "item 1 name", "item_summary": "item 1 summary", "item_brand": "Brand 1", "image_type_name": "SmallImage", "url": "http://a/b/c" }" mimeType="application/json" doc:name="Set JSON Payload"/>
<json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/>
<dw:transform-message metadata:id="3dad12b9-422d-4c59-9ec6-dd220ebca9ef" doc:name="Transform Message">
<dw:input-payload doc:sample="sample_data\flow16_HashMap_1.dwl" mimeType="application/java"/>
<dw:set-payload><![CDATA[%dw 1.0
%namespace mes http://www.namespace1.com/test/message/1.0
%namespace mod htto://www.namespace2.com/test/model/1.0
%output application/xml
---
mes#getItemResponse: {
mod#item : {
(payload)
}
}]]></dw:set-payload>
</dw:transform-message>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<logger message="Test1 Transformer output : #[payload]" level="INFO" doc:name="Logger"/>
</sub-flow>
POC包含DataWeave脚本,用于将Java Map转换为SOAP XML响应
%dw 1.0
%namespace mes http://www.namespace1.com/test/message/1.0
%namespace mod htto://www.namespace2.com/test/model/1.0
%output application/xml
---
mes#getItemResponse: {
mod#item : {
(payload)
}
}
硬编码输入Java地图:
{
"item_id": "B0002345W45",
"item_type": "Item Type 1",
"item_type_name": "Item Type 1 Name",
"item_name": "item 1 name",
"item_summary": "item 1 summary",
"item_brand": "Brand 1",
"image_type_name": "SmallImage",
"url": "http://a/b/c"
}
输出:
<mes:getItemResponse xmlns:mes="http://www.namespace1.com/test/message/1.0">
<mod:item xmlns:mod="htto://www.namespace2.com/test/model/1.0">
<item_id>B0002345W45</item_id>
<item_type>Item Type 1</item_type>
<item_type_name>Item Type 1 Name</item_type_name>
<item_name>item 1 name</item_name>
<item_summary>item 1 summary</item_summary>
<item_brand>Brand 1</item_brand>
<image_type_name>SmallImage</image_type_name>
<url>http://a/b/c</url>
</mod:item>
</mes:getItemResponse>
答案 2 :(得分:-1)
您可以尝试使用
{`%dw 1.0
{ xmlRootElement: tagName1:payload.DBEntryName1, tagName2:payload.DBEntryName2 }
}`