如何将2 xmls合并到mule

时间:2017-03-05 17:59:32

标签: xml xslt mule dataweave

我有一个要求两个将两个相似的xml响应组合成一个xml有效负载。在这里,我将一个xml存储到flowVar中,而另一个则存储在有效负载中。我尝试使用XSLT但没有得到它。以下是xml响应示例。

Response1:

<root>
 <token>hhd</token>
 <type>xyz</type>
 <statement>
   <id>1</id>
   <name>sri</name>
 </statement>
 <statement>
   <id>2</id>
   <name>jay</name>
 </statement>
<root>

RESPONSE2:

<root>
 <token>hhd</token>
 <type>xyz</type>
 <statement>
   <id>3</id>
   <name>paul</name>
 </statement>
 <statement>
   <id>4</id>
   <name>nick</name>
 </statement>
<root>

在上面两个类似的响应中,我必须在第一个xml响应中添加第二个响应语句标记。除了语句标记之外,所有标记在xmls中都是相同的。我正在使用XSLT而无法做到。

输出:

<root>
 <token>hhd</token>
 <type>xyz</type>
 <statement>
   <id>1</id>
   <name>sri</name>
 </statement>
 <statement>
   <id>2</id>
   <name>jay</name>
 </statement>
 <statement>
   <id>3</id>
   <name>paul</name>
 </statement>
 <statement>
   <id>4</id>
   <name>nick</name>
 </statement>
<root>

有没有其他方法可以像使用dataweave那样做。 感谢。

4 个答案:

答案 0 :(得分:0)

您可以采用多种方式...例如,如果您使用Dataweave,则可以使用以下数据编辑脚本进行解决: -

在这里,我已经存储了一个xml有效负载,例如xml2在流变量数据中,以及其他xml来自有效负载。

<set-variable variableName="data" value="&lt;root&gt;&lt;token&gt;hhd&lt;/token&gt;&lt;type&gt;xyz&lt;/type&gt;&lt;statement&gt;&lt;id&gt;3&lt;/id&gt;&lt;name&gt;paul&lt;/name&gt;&lt;/statement&gt;&lt;statement&gt;&lt;id&gt;4&lt;/id&gt;&lt;name&gt;nick&lt;/name&gt;&lt;/statement&gt;&lt;/root&gt;" doc:name="Variable" mimeType="application/xml"/>

  <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[
             %dw 1.0
             %output application/xml 
              ---
            root : {
            token:payload.root.token,
            type:payload.root.type,
            (payload.root.*statement map {
             statement : {
               ($)

                }  
             }),

          (flowVars.data.root.*statement map {
            statement : {
            ($)

          }  
         })

 }]]></dw:set-payload>
        </dw:transform-message>

我正在关注组合输出xml: -

<?xml version='1.0' encoding='windows-1252'?>
<root>
    <token>hhd</token>
    <type>xyz</type>
    <statement>
        <id>1</id>
        <name>sri</name>
    </statement>
    <statement>
        <id>2</id>
        <name>jay</name>
    </statement>
    <statement>
        <id>3</id>
        <name>paul</name>
    </statement>
    <statement>
        <id>4</id>
        <name>nick</name>
    </statement>
</root>

注意只需确保,如果您要从邮递员发布一个有效负载xml,请确保将Content-Type定义为application/xml并设置mime-type流变量到application/xml,你存储另一个xml
还要确保你的response1 xml和response2 xml都有效,因为我发现你还没有结束根标记

答案 1 :(得分:0)

最简单的方法就是添加像

这样的对象
<dw:transform-message doc:name="Transform Message" >
            <dw:input-payload mimeType="application/xml"/>
            <dw:set-payload><![CDATA[%dw 1.0
%output application/xml
---
root : payload.root ++ flowVars.data.root.*statement ]]></dw:set-payload>
        </dw:transform-message>

希望这有帮助

答案 2 :(得分:0)

结合有效载荷使用,&#34;展平有效载荷&#34;在转换消息中。它将两者结合起来并显示为单个有效载荷。

答案 3 :(得分:0)

我有类似的问题, 我试图将两个xml源(有效载荷一个,变量一个)转换为Java对象(数组列表)。 然后,我用有效负载++ vars.xmlmessage 设置了有效负载 我在此旁边使用了dataweave / transfrom消息将其转换为XML,如下所示:

%dw 2.0
output application/xml
---
{
  responsedata: {
    message: payload
  }
}