Создать параметр GET из массива xml
Я новичок в WSO2 EI
, Теперь я уже создаю rest API,
и в in_sequense я звоню первым WSDL
конечная точка с параметрами из созданного API, и я получаю следующий XML из этого WSDL
конечная точка.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://pse/">
<SOAP-ENV:Body>
<ns1:dl190Response>
<mvts>
<mvts_S>
<x>x1</x>
<w>w1</w>
</mvts_S>
<mvts_S>
<x>x2</x>
<w>w2</w>
</mvts_S>
</mvts>
</ns1:dl190Response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Как я могу создать параметр со значением "Your statistic is x1, w1, x2, w2"
вызвать следующую конечную точку с параметрами get?
XML-массив с первой конечной точки может иметь различный вес. Какие посредники я могу использовать для этого? Спасибо!
1 ответ
Как я понял, ваше требование - извлечь значения из XML и сохранить его в переменной, чтобы вы могли использовать это значение для вызова чего-то другого, если это понимание верно, вы можете использовать xpath для извлечения значений и сохранения их в собственность, и вы можете использовать собственность позже.
<property name="yourParameter" expression="concat('Your statistic ',$body//*[local-name()='mvts_S'][1]/*[local-name()='x'],',',$body//*[local-name()='mvts_S'][1]/*[local-name()='w'],',',$body//*[local-name()='mvts_S'][2]/*[local-name()='x'],',',$body//*[local-name()='mvts_S'][2]/*[local-name()='w'])"/>
<log level="custom">
<property name="yourParameter" expression="$ctx:yourParameter"/>
</log>
Выше работает только, если есть фиксированный массив, однако для нескольких элементов в массиве вам нужно написать посредник xslt, а затем вывод этого должен быть объединен в свойстве.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tem="http://tempuri.org/">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<Root>
<xsl:for-each select="//*[local-name()='dl190Response']/*[local-name()='mvts']/*[local-name()='mvts_S']">
<xsl:value-of select="concat(x,',')"/><xsl:value-of select="concat(w,',')"/>
</xsl:for-each>
</Root>
</xsl:template>
</xsl:stylesheet>
После xslt медиатора используйте свойство mediator
<log level="custom">
<property name="yourParameter" expression=" concat ('Your statistic ',$body//*[local-name()='Root']/text())"/>
</log>
<property name="yourParameter" expression=" concat ('Your statistic ',$body//*[local-name()='Root']/text())"/>
<log level="custom">
<property name="yourParameter1" expression="substring($ctx:yourParameter,1,string-length($ctx:yourParameter)-1)"/>
</log>