Subject: Re: [xsl] 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Problems copying elements, Jeni Tennison | Thread | [xsl] XSL jobs at eBay, Mulberry Technologie |
Re: [xsl] some namespacing problems, David Carlisle | Date | RE: [xsl] some namespacing problems, bryan |
Month |