xslt - Convert String to Tree Structure -


i'm new xslt (1.0), anyhow want start difficult ....

given source xml stringvalue "432565" (<line>432565</line>)

output should xml

<element id="1">4</element> <element id="2">43</element> <element id="3">432</element> <element id="4">4325</element> <element id="5">43256</element> <element id="6">432565</element> 

currently i've recursive template

 <xsl:template match="line" name="letters">     <xsl:param name="text" select="."/>     <xsl:if test="$text != ''">       <xsl:variable name="letter" select="substring($text, 1, 1)"/>       <element>         <xsl:value-of select="$letter"/>       </element>       <xsl:call-template name="letters">         <xsl:with-param name="text" select="substring-after($text, $letter)"/>       </xsl:call-template>     </xsl:if>   </xsl:template> 

that return

<element>4</element> <element>3</element> <element>2</element> <element>5</element> <element>6</element> <element>5</element> 

i feel solution not far away, mentioned, i'm new xslt.

as passing in text parameter, pass in "length" parameter, starts @ 1, , incrementing 1 each call of template. can used determine length of text string output.

try template instead

 <xsl:template match="line" name="letters">     <xsl:param name="text" select="."/>     <xsl:param name="length" select="1"/>     <xsl:if test="$length &lt;= string-length($text)">       <xsl:variable name="letter" select="substring($text, 1, $length)"/>       <element id="{$length}">         <xsl:value-of select="$letter"/>       </element>       <xsl:call-template name="letters">         <xsl:with-param name="text" select="$text"/>         <xsl:with-param name="length" select="$length + 1"/>       </xsl:call-template>     </xsl:if> </xsl:template> 

note use of attribute value templates in creating id attribute too.


Popular posts from this blog