Subject: Re: [xsl] Indent based on position() From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Thu, 11 Apr 2002 13:05:33 +0100 |
Hi Brook, > So, when i process each <line> I need to duplicate the "-" character > as many times as the position() of the <line> being processed, I > think. Can I do this? Yes. I think the easiest way would be to use the Piez method of iterating over the correct number of nodes to repeat the same string: <xsl:for-each select="...the right number of nodes...">-</xsl:for-each> In your case, getting hold of the correct number of nodes is easy -- you can collect together all the preceding sibling of the line, plus the line itself: <xsl:template match="line"> <xsl:for-each select=". | preceding-sibling::line">-</xsl:for-each> <xsl:apply-templates /> <br /> </xsl:template> If you have lots and lots of lines in each content, you might find a step-by-step method more efficient. For that, apply templates to only the first line: <xsl:template match="content"> <p> <xsl:apply-templates select="line[1]" /> </p> </xsl:template> Then have a template for the line element that gets passed in the right number of '-'s as a parameter, prints that out, then the line, then the br element, and then applies templates to the immediately following sibling line, adding one hyphen to the indent: <xsl:template match="line"> <xsl:param name="indent" select="'-'" /> <xsl:value-of select="$indent" /> <xsl:apply-templates /> <br /> <xsl:apply-templates select="following-sibling::line[1]"> <xsl:with-param name="indent" select="concat($indent, '-')" /> </xsl:apply-templates> </xsl:template> --- In XSLT 2.0, you could do: <xsl:template match="line"> <xsl:for-each select="1 to position()">-</xsl:for-each> <xsl:apply-templates /> <br /> </xsl:template> or: <xsl:template match="line"> <xsl:value-of select="for $i in 1 to position() return '-'" separator="" /> <xsl:apply-templates /> <br /> </xsl:template> Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Indent based on position(, David Carlisle | Thread | Re: [xsl] Indent based on position(, Kirk Allen Evans |
Re: [xsl] Indent based on position(, David Carlisle | Date | Re: [xsl] XSL month sorting, Jeni Tennison |
Month |