This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: how to get total string-length()
- From: "Matthew L. Avizinis" <mla at gleim dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Fri, 2 Aug 2002 10:01:21 -0400
- Subject: RE: [xsl] how to get total string-length()
- Reply-to: xsl-list at lists dot mulberrytech dot com
> -----Original Message-----
> From: owner-xsl-list@lists.mulberrytech.com
> [mailto:owner-xsl-list@lists.mulberrytech.com]On Behalf Of J.Pietschmann
> Sent: Thursday, August 01, 2002 3:46 PM
> To: xsl-list@lists.mulberrytech.com
> Subject: Re: [xsl] how to get total string-length()
>
>
> Matthew L. Avizinis wrote:
> > Hello all,
> > If I have the following snippet:
> >
> > <fo:block margin-right="{concat(NNN*1.5),'mm')}">
> > --------------------------------^^^
> > <xsl:call-template name="process-nodes"/>
> > <xsl:if test="not(@no-pg-num)">
> > <fo:leader leader-pattern="dots" leader-pattern-width="2.0mm"
> > leader-alignment="reference-area"/>
> > </xsl:if>
> > <xsl:for-each
> > select="document(concat($libname,'/index.xml'))//index/index-term[@id =
> > $primary]">
> > <xsl:value-of select="."/><xsl:if test="position() !=
> > last()">, </xsl:if>
> > </xsl:for-each>
> > </fo:block>
> >
> > In the for-each line I grab each index-term that has an id that
> matches the
> > value in $primary. Thus I could have a line like
> > the index entry..........123, 234, 345
> >
> > What I want to be able to do is, using the example in the line above,
> > calculate the number of characters in "123, 234, 345" and be
> able to insert
> > it in the NNN location in the block margin-right location.
> Obviously I need
> > to figure this out outside/before the block, but howto, that's
> the question.
>
> This appears to be really easy: put it into a variable
> and use string-length:
>
> <xsl:variable name="page-list">
> <xsl:for-each
> select="document(concat($libname,
> '/index.xml'))//index/index-term[@id = $primary]">
> <xsl:value-of select="."/><xsl:if test="position() !=
> last()">, </xsl:if>
> </xsl:for-each>
> </xsl:variable>
>
>
> <fo:block margin-right="{concat(string-length($page-list)*1.5),'mm')}">
> <xsl:call-template name="process-nodes"/>
> <xsl:if test="not(@no-pg-num)">
> <fo:leader leader-pattern="dots" leader-pattern-width="2.0mm"
> leader-alignment="reference-area"/>
> </xsl:if>
> <xsl:value-of select="$page-list"/>
> </fo:block>
>
> If you have any markup in the page number list, like fo:basic-links,
> use xsl:copy-of instead of xsl:value-of.
>
> J.Pietschmann
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list