The XSLT Mediator of WSO2 ESB applies a specified XSLT transformation to a selected element of the current message payload. In this post i am going to write a simple XSLT style sheet which will read values from the current XML payload inside ESB using XPath and populate them into style sheet to create a new or different payload.
Below is our original XML payload.
Below is our original XML payload.
We will be passing this payload into XSLT mediator with specifying a certain drink name as a parameter to the style sheet. For e.g i am passing drink name as 'Coffee'. At the style sheet it will traverse through incoming payload and find the <lunch> elements which contains 'Coffee' as drink name. If matches found we add the prices of those elements under a new <Payment> element. So when we come out of XSLT mediator the payload will be now changed to the <Payment> entry where it contains drinkPrices of matching elements.
The style sheet 'discountPayment.xsl' is like this.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:m0="http://services.samples" version="2.0" exclude-result-prefixes="m0 fn">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="drink_name"/>
<xsl:template match="/">
<Payment>
<xsl:for-each select="//Order/lunch[contains(drinkName, $drink_name)]">
<discount>
<xsl:value-of select="drinkPrice"/>
</discount>
</xsl:for-each>
</Payment>
</xsl:template>
</xsl:stylesheet>
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="drink_name"/>
<xsl:template match="/">
<Payment>
<xsl:for-each select="//Order/lunch[contains(drinkName, $drink_name)]">
<discount>
<xsl:value-of select="drinkPrice"/>
</discount>
</xsl:for-each>
</Payment>
</xsl:template>
</xsl:stylesheet>
Add this style sheet into local-entries of ESB and it can be referred from XSLT mediator as this.
After coming out from XSLT mediator now our current message payload is changed to below.
Hi Isha,
ReplyDeleteDo you have any idea, how to get xslt file from database and use it for transformation in proxy without placing it in registry resources