I have variable (array) - [123, 456, 789]
. I need to extract all the values and output. I'm using XSLT 2.0.
Sample Input XML
<xsl:param name="pNumbers" select="'[123, 456, 789]'" />
<xsl:template match="Response">
<xsl:copy-of select="."/>
<xsl:element name="Numbers">
<xsl:element name="Number">
<xsl:value-of select="$pNumbers"/>
</xsl:element>
</xsl:element>
</xsl:template>
I need to get
<Numbers>
<Number>
123
</Number>
<Number>
456
</Number>
<Number>
789
</Number>
</Numbers>
Also, the value can be one in the array - [123]
<Numbers>
<Number>
123
</Number>
</Numbers>
Using xsl:for-each did not happen to implement this.
Upd:
Almost, but not the last element
<xsl:template name="split">
<xsl:param name="str" select="."/>
<xsl:choose>
<xsl:when test="contains($str, ',')">
<xsl:element name="Number">
<xsl:value-of select="normalize-space(substring-before($str, ','))"/>
</xsl:element>
<xsl:call-template name="split">
<xsl:with-param name="str" select="substring-after($str, ',')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:element name="Number">
<xsl:value-of select="$pNumbers"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Upd2
Solved XSLT 1.0. All thanks.
<xsl:template name="split">
<xsl:param name="str" select="."/>
<xsl:choose>
<xsl:when test="contains($str, ',')">
<xsl:element name="Number">
<xsl:value-of select="normalize-space(substring-before($str, ','))"/>
</xsl:element>
<xsl:call-template name="split">
<xsl:with-param name="str" select="substring-after($str, ',')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:element name="Number">
<xsl:value-of select="normalize-space($str)"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="Numbers">
<xsl:element name="Number">
<xsl:call-template name="split">
<xsl:with-param name="str" select="substring-before(
substring-after(
$pNumber, '[' )
,']' )" />
</xsl:call-template>
</xsl:element>
</xsl:template>