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


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


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