Subject: Re: Problems copying elements recursively.
From: Imrran Wahid <devguy2003@xxxxxxxxx>
Date: Mon, 10 Feb 2003 08:09:15 -0800 (PST)
|
Thanks to Jeni Tennison, Michael Kay, Dimitre
Novatchev and all others who helped me understand XSL
better wrt to a solution to this problem. I have
ordered Michael Kay's and Jeni Tennison's book to get
me up to speed with XSLT.
Imrran
--- Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> wrote:
> Dimitre wrote:
> > "Imrran Wahid" <devguy2003@xxxxxxxxx> wrote in
> message
> >
>
news:20030209234334.51979.qmail@xxxxxxxxxxxxxxxxxxxxxxxxx
> >> Pardon me for asking what may be a simple
> question,
> >> but I am not very well versed in xsl. How do I
> >> translate the count to number of spaces(?)?
> >
> > The simplest (to understand) way is to have an
> xsl:variable
> > containing a sufficiently long string of spaces.
> Then take the exact
> > number of spaces using the substring() function.
> >
> > Another way (when one doesn't know the maximum
> possible number of
> > spaces that will be needed) is to use a recursive
> named template --
> > e.g. one from exslt, or this one:
> >
> >
>
http://sources.redhat.com/ml/xsl-list/2001-07/msg01040.html
> >
> > Or use the "iter" template from the FXSL library.
> >
> > The last solution is the most generic and can be
> used to implement
> > any iteration of the type "Do something N times".
>
> Just to add to Dimitre's suggestion: since Imrran is
> counting
> ancestors to work out how many non-breaking spaces
> to add, it would be
> a good idea to use one of the above methods to
> create an $indent
> number of spaces (e.g. in an $indent-spaces global
> variable), and then
> use xsl:for-each to iterate over the ancestors to
> multiply that number
> of non-breaking spaces:
>
> <xsl:for-each select="ancestor::*">
> <xsl:value-of select="$indent-spaces" />
> </xsl:for-each>
>
> Another method that I use when formatting a tree is
> to pass down the
> previous indent as a parameter from parent to child,
> adding an indent
> on each step. Something like:
>
> <xsl:template match="*">
> <xsl:param name="indent" />
> ...
> <xsl:apply-templates>
> <xsl:with-param name="indent"
> select="concat($indent,
> $indent-spaces)" />
> </xsl:apply-templates>
> ...
> </xsl:template>
>
> Again, the $indent-spaces that you add to the indent
> at each level may
> need to be constructed dynamically from a number
> using one of
> Dimitre's suggestions above.
>
> Cheers,
>
> Jeni
>
> ---
> Jeni Tennison
> http://www.jenitennison.com/
>
>
> XSL-List info and archive:
> http://www.mulberrytech.com/xsl/xsl-list
>
__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
Dimitre Novatchev - Mon, 10 Feb 2003 00:37:34 -0500 (EST)
- Jeni Tennison - Mon, 10 Feb 2003 04:58:18 -0500 (EST)
- Imrran Wahid - Mon, 10 Feb 2003 11:07:19 -0500 (EST) <=
|
|