This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: generalisation of template



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@lists.mulberrytech.com
[mailto:owner-xsl-list@lists.mulberrytech.com]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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]