Поскольку вы используете Collection Aggregator
вы будете получать массивы XML, такие как [xml1, xml2, ... так далее, как вы упомянули.
Таким образом, вы должны извлечь каждую полезную нагрузку и сохранить в переменную и передать эти значения XML-переменных в ваш XSL файл, который будет генерировать свой ожидаемый результат ... Вы можете попробовать что-то, как следовать после Collection Aggregator
: -
<set-variable variableName="value1" value="#[message.payload[0][0].replace('<?xml version="1.0" encoding="UTF-8"?>','')]" doc:name="Variable"/>
<set-variable variableName="value2" value="#[message.payload[0][1].replace('<?xml version="1.0" encoding="UTF-8"?>','')]" doc:name="Variable"/>
Затем вы можете установить любой фиктивный полезной нагрузки XML, прежде чем ваш трансформатор XSLT и передать полезную нагрузку XML из каждой переменной в ваших XSL-файлов: -
<set-payload value="#[message.payload[0][0]]" doc:name="Set Payload"/>
<mulexml:xslt-transformer xsl-file="response.xsl" maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT" mimeType="application/xml">
<mulexml:context-property key="value1" value="#[flowVars.value1]" />
<mulexml:context-property key="value2" value="#[flowVars.value2]" />
</mulexml:xslt-transformer>
Поместите файл response.xsl под SRC/главная/ресурсы папку и файл XSL может выглядеть следующим образом: -
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:param name="value1" />
<xsl:param name="value2" />
<xsl:template match="/">
<root>
<xsl:value-of select="$value1"/>
<xsl:value-of select="$value2"/>
</root>
</xsl:template>
</xsl:stylesheet>
Таким образом, полный код после того, как ваш Collection Aggregator
будет: -
<collection-aggregator failOnTimeout="true" doc:name="Collection Aggregator"/>
<!-- <logger message="#[message.payload[0]] #['\n'] #[message.payload[1]]" level="INFO" doc:name="Logger"/> -->
<set-variable variableName="value1" value="#[message.payload[0][0].replace('<?xml version="1.0" encoding="UTF-8"?>','')]" doc:name="Variable"/>
<set-variable variableName="value2" value="#[message.payload[0][1].replace('<?xml version="1.0" encoding="UTF-8"?>','')]" doc:name="Variable"/>
<set-payload value="#[message.payload[0][0]]" doc:name="Set Payload"/>
<mulexml:xslt-transformer xsl-file="response.xsl" maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT" mimeType="application/xml">
<mulexml:context-property key="value1" value="#[flowVars.value1]" />
<mulexml:context-property key="value2" value="#[flowVars.value2]" />
</mulexml:xslt-transformer>
Пожалуйста, обратите внимание, что я только принимать 2 XML полезную информацию, как пример, и вам нужно сделать это для всего xml из объединенного массива полезных данных.
Прямо сейчас из вашего примера есть 3 XML, так что вам нужно хранить 3 XML в переменных потока и дизайн шаблона XSL соответственно
UPDATE: - Альтернативный способ заключается в использовании функции String, после того, как collection-aggregator
<collection-aggregator failOnTimeout="true" doc:name="Collection Aggregator"/>
<set-payload value="#[message.payload.toString().replaceAll("\\[", "").replaceAll("\\]","") ]" doc:name="Set Payload"/>
<set-payload value="#[message.payload.replace('<?xml version="1.0" encoding="UTF-8"?>','')]" doc:name="Set Payload"/>
<set-payload value="#[message.payload.replace('>,','>')]" doc:name="Copy_of_Set Payload"/>
<set-payload value="#['<root>'+payload+'</root>']" doc:name="Set Payload"/>
Это сочетание функций Струнные и регулярных выражений выражения
Для удаления запятой, используйте
<set-payload value="#[message.payload.replace('>,','>')]" doc:name="Copy_of_Set Payload"/>
Это не заменит любой запятой в XML-узлов ЗНАЧЕНИЯ
вы можете вставить XML поток здесь? Как вы читаете 4 XML? – Abhay