如何使用mule中的dataweave将HashMap转换为XML

时间:2016-06-28 03:49:01

标签: mule dataweave

我想将DB记录转换为XML。从DB记录中选择查询将LinkedHashMap作为有效负载。现在我想使用dataweave将其转换为XML。我很陌生,所以有点失落。为了做到这一点,我需要遵循哪些步骤?

谢谢。

3 个答案:

答案 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="{   &quot;item_id&quot;: &quot;B0002345W45&quot;,   &quot;item_type&quot;: &quot;Item Type 1&quot;,   &quot;item_type_name&quot;: &quot;Item Type 1 Name&quot;,   &quot;item_name&quot;: &quot;item 1 name&quot;,   &quot;item_summary&quot;: &quot;item 1 summary&quot;,   &quot;item_brand&quot;: &quot;Brand 1&quot;,   &quot;image_type_name&quot;: &quot;SmallImage&quot;,   &quot;url&quot;: &quot;http://a/b/c&quot;  }" 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

%输出应用程序/ xml

{ xmlRootElement:     tagName1:payload.DBEntryName1,     tagName2:payload.DBEntryName2 }

}`