从 xml 数组创建 GET 参数
Create GET parameter from xml array
我是 WSO2 EI
的新手。
现在我已经创建了一个 rest API,
,在 in_sequense 中,我使用创建的 API 中的参数调用第一个 WSDL
端点,然后从这个 WSDL
中检索下一个 XML ]端点。
<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"
的参数来调用带有获取参数的下一个端点?
XML 来自第一个端点的数组可以具有不同的权重。
我可以使用哪些调解员?
谢谢!
据我了解,您的要求是从 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 调解器后 属性 调解器
<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>
我是 WSO2 EI
的新手。
现在我已经创建了一个 rest API,
,在 in_sequense 中,我使用创建的 API 中的参数调用第一个 WSDL
端点,然后从这个 WSDL
中检索下一个 XML ]端点。
<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"
的参数来调用带有获取参数的下一个端点?
XML 来自第一个端点的数组可以具有不同的权重。
我可以使用哪些调解员?
谢谢!
据我了解,您的要求是从 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 调解器后 属性 调解器
<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>