[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] generalisation of template
Subject: RE: [xsl] generalisation of template From: "Andrew Welch" <andrew@xxxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 18 Jan 2002 10:50:25 -0000 |
Thanks Jeni, great as always (and it always seems so simple once its in front of me...) I think I need to test that substring-after really is a number as my templates that match 'mplhead' and 'mpldata' are no longer being matched/called. What is the best way of doing this? number(substring-after(name(), 'mpl')>=0 seems to do the trick, is this ok? cheers andrew === -----Original Message----- From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Jeni Tennison Sent: Friday, January 18, 2002 10:15 AM To: Andrew Welch Cc: XSL-List (E-mail) Subject: Re: [xsl] generalisation of template Hi Andrew, > I have this template (c/o Ken) that traverses some nested XML and > calls row_even or row_odd. The problem is that it uses the actual > element names (qnames, right?) to recursively make its way through > the tree. This is fine but a neater (and more future proof) solution > would be a general template that could be applied to all 'nesting > depths'. So, can this be done without using 'mplx' and using > something like 'child[position()=last()][child has child nodes(!)]' > ?? Can you even call templates in this way? Rather than having: > <xsl:template match="mpl0|mpl1|mpl2|mpl3|mpl4"> You could have: <xsl:template match="*[starts-with(name(), 'mpl') and number(substring-after(name(), 'mpl'))]"> And rather than having: > <xsl:apply-templates select="mpl1|mpl2|mpl3|mpl4"> You could similarly have: <xsl:apply-templates select="*[starts-with(name(), 'mpl') and number(substring-after(name(), 'mpl'))]"> Whether you actually want to test whether the substring after the 'mpl' in the name is actually a number is up to you - if you don't have any other elements in your source document that start with 'mpl' then you don't have to, of course. > Also :) If the solution could include outputting a '>' or similar at > the first element of each level (like a directory + or - ) that has > child nodes (that have child nodes) then I would be extremely > greatful I think that you can do that just by testing the position() of the node that you're on. So just add something like: <xsl:if test="position() = 1"> <xsl:text> - </xsl:text> </xsl:if> Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] generalisation of templat, Jeni Tennison | Thread | Re: [xsl] generalisation of templat, Jeni Tennison |
Re: [xsl] generalisation of templat, Jeni Tennison | Date | [xsl] newbie - problem with sum, Hesselberth, Jan |
Month |
Keywords