Как объединить 2 xmls в одну полезную нагрузку xml в муле

У меня есть требование два объединить два одинаковых ответов XML в одну полезную нагрузку XML. Здесь я сохранил один xml в flowVar, а другой в полезной нагрузке. Я пытаюсь с XSLT, но не получаю его. Ниже приведен пример ответов xml.

Ответ 1:

<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 ответа

У меня была похожая проблема, и я попытался преобразовать исходный код xml (один в полезной нагрузке и один в переменной) в объекты Java (список массивов). Затем я поставил set payload с payload ++ vars.xmlmessage. Я использовал dataweave/transfrom сообщение рядом с этим для преобразования в XML, как показано ниже:

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

Самый простой способ, как добавить объекты, такие как

<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>

Надеюсь это поможет

Вы можете сделать это разными способами... например, если вы используете Dataweave, вы можете решить, используя следующие скрипты 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 действительны, так как я могу обнаружить, что вы не завершили корневой тег

Чтобы объединить полезную нагрузку, "сгладьте полезную нагрузку" в Transform Message. Он объединит оба и отобразит как одну полезную нагрузку.

Другие вопросы по тегам