I have the following XML source:
<element not-relevant="true" bold="true" superscript="true" subscript="false" text="stuff"/>
In any order, I need to iterate over certain attributes (that is, only those associated with the HTML I created: bold / superscript / index, etc.), and where one of these attributes evaluates to βtrueβ, output nested elements to get the following output:
<strong> <sup> stuff </sup> </strong>
I have a feeling that I need to use some kind of recursion, as it should (without an infinite loop, of course):
<xsl:template match="element"> <xsl:call-template name="content"> <xsl:with-param name="text" select="@text"/> </xsl:call-template> </xsl:template> <xsl:template name="content"> <xsl:param name="text"/> <xsl:choose> <xsl:when test="@bold = 'true'"> <strong> <xsl:copy> <xsl:call-template name="content"> <xsl:with-param name="text" select="$text"/> </xsl:call-template> <xsl:copy> </strong> </xsl:when> <xsl:when test="@subscript = 'true'"> <sub> <xsl:copy> <xsl:call-template name="content"> <xsl:with-param name="text" select="$text"/> </xsl:call-template> <xsl:copy> </sub> </xsl:when> <xsl:when test="@superscript = 'true'"> <sup> <xsl:copy> <xsl:call-template name="content"> <xsl:with-param name="text" select="$text"/> </xsl:call-template> <xsl:copy> </sup> </xsl:when> <xsl:otherwise> <xsl:value-of select="$text" disable-output-escaping="yes"/> </xsl:otherwise> </xsl:choose> </xsl:template>
Any ideas? I am looking for the purest XSLT 2.0 solution and appreciate the help.
Thanks,
Aaron source share