Как объединить 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="<root><token>hhd</token><type>xyz</type><statement><id>3</id><name>paul</name></statement><statement><id>4</id><name>nick</name></statement></root>" 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. Он объединит оба и отобразит как одну полезную нагрузку.