Subject: RE: [xsl] Tracking position in recursive functions? From: Emmanuel Bégué <eb@xxxxxxxxxx> Date: Thu, 2 Apr 2009 09:37:32 +0200 |
Hello, You need to recursively send a "position" parameter to increment the position. If you simplify your template thusly: <xsl:template name="str:_tokenize-delimiters"> <xsl:param name="args"/> <xsl:param name="delimiters"/> <xsl:param name="pos" select="1"/> <xsl:variable name="delimiter" select="substring($delimiters, 1, 1)"/> <xsl:variable name="left"> <xsl:choose> <xsl:when test="not(contains($args,$delimiter))"> <xsl:value-of select="$args"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="substring-before($args,$delimiter)"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="right" select="substring-after($args,$delimiter)"/> <xsl:if test="$left != ''"> <option pos="{$pos}"><xsl:value-of select="$left"/></option> </xsl:if> <xsl:if test="$right != ''"> <xsl:call-template name="str:_tokenize-delimiters"> <xsl:with-param name="args" select="$right"/> <xsl:with-param name="delimiters" select="$delimiters"/> <xsl:with-param name="pos" select="$pos + 1"/> </xsl:call-template> </xsl:if> </xsl:template> (with just one recursive call instead of three, and just one writing of the <option> element) you get: for the source string ('args'): one two three four and the space delimiter the following result: <option pos="1">one</option> <option pos="2">two</option> <option pos="3">three</option> <option pos="4">four</option> Regards, EB > -----Original Message----- > From: himanshu padmanabhi [mailto:himanshu.padmanabhi@xxxxxxxxx] > Sent: Thursday, April 02, 2009 8:56 AM > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Tracking position in recursive functions? > > > Hi, > > These is just the part of str::tokenize. > > I just want to ask how to track "position" in recursive functions like > "str:_tokenize-delimiters"? > > "position()" isn't solving the purpose. > > "$args" value is "-p 10 -t 20 abcd.domain.com" which I want to > tokenize by space. > > What my final goal is, > If called with position()=1 then print 2nd pos = 10 > If called with position()=2 then print 4nd pos = 20 > If called with position()=3 then print 5nd pos = abcd.domain.com > (There are 3 xml elements so str:tokenize can be called 3 times or I > call it 1 time and save 2,4,5 values in variables and can print it in > calling template.) > > Currently it is printing all the tokens each time. > Tracking 'position' in recursive function also can give me answer like > 2nd,4th,5th position token. > > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:str="http://exslt.org/strings" > extension-element-prefixes="str"> > > <xsl:template name="str:_tokenize-delimiters"> > <xsl:param name="args" /> > <xsl:param name="delimiters" /> > > <xsl:variable name="delimiter" select="substring($delimiters, 1, 1)" /> > > <xsl:choose> > <xsl:when test="not($delimiter)" > > <option><xsl:value-of select="$args" /></option> > </xsl:when> > > <xsl:when test="contains($args, $delimiter)"> > <option><xsl:value-of select="substring-after($args, > $delimiter)" /></option> > <xsl:if test="not(starts-with($args, $delimiter))"> > <xsl:call-template name="str:_tokenize-delimiters"> > <xsl:with-param name="args" > select="substring-before($args, $delimiter)" /> > <xsl:with-param name="delimiters" > select="substring($delimiters, 2)" /> > </xsl:call-template> > </xsl:if> > > <xsl:call-template name="str:_tokenize-delimiters"> > <xsl:with-param name="args" select="substring-after($args, > $delimiter)" /> > <xsl:with-param name="delimiters" select="$delimiters" /> > </xsl:call-template> > </xsl:when> > > <xsl:otherwise> > <xsl:call-template name="str:_tokenize-delimiters"> > <xsl:with-param name="args" select="$args" /> > <xsl:with-param name="delimiters" > select="substring($delimiters, 2)" /> > </xsl:call-template> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > > </xsl:stylesheet> > --------------------------------- > Thanks and Regards, > Himanshu Padmanabhi
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Tracking position in recursiv, himanshu padmanabhi | Thread | RE: [xsl] Tracking position in recu, Michael Kay |
[xsl] Tracking position in recursiv, himanshu padmanabhi | Date | RE: [xsl] Conditional Include state, Michael Kay |
Month |