Sharing this XSLT which I used couple of years back to concat a node set. The usecase was to extract a specific node set and concatenate their values.
Sample Input:
Desired Output:
XSLT:
Note: The similar result can be achieved by using XPATH evaluator to get text of data node set (ie /root/node/data/text()), depending on the requirement one or the other approach may be more suitable.
Sample Input:
<root> <node> <data>123</data> <data>456</data> <junk>abc</junk> </node> <junknode> <junk>def</junk> </junknode> <node> <data>789</data> <junk>ghi</junk> <data>012</data> </node> </root>
Desired Output:
<out> <mssg>123456789012</mssg> <junk>abcdefghi</junk> </out>
XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output indent="yes" /> <xsl:template match="/"> <out> <xsl:variable name="mssg_data"> <xsl:call-template name="ConCat"> <xsl:with-param name="List" select="/root/node/data" /> </xsl:call-template> </xsl:variable> <xsl:variable name="junk_data"> <xsl:call-template name="ConCat"> <xsl:with-param name="List" select="//junk" /> </xsl:call-template> </xsl:variable> <mssg> <xsl:value-of select="$mssg_data" disable-output-escaping="no" /> </mssg> <junk> <xsl:value-of select="$junk_data"/> </junk> </out> </xsl:template> <xsl:template name="ConCat"> <xsl:param name="List" /> <xsl:param name="result" select="''" /> <xsl:choose> <xsl:when test="$List"> <xsl:call-template name="ConCat"> <xsl:with-param name="List" select="$List[position() > 1]" /> <xsl:with-param name="result" select="concat($result, $List[1])" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$result" disable-output-escaping="no" /> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
Note: The similar result can be achieved by using XPATH evaluator to get text of data node set (ie /root/node/data/text()), depending on the requirement one or the other approach may be more suitable.
No comments:
Post a Comment