Hello all,
I'm having a problem with doing something on a more proper way, I hope you
help me with this one.
Imagine you have a template which can be used on several places in your
stylesheet, let's call it 'generalTemplate'
<xsl:template name="generalTemplate>
do some calculations here, but stay in current node context (so no
for-each, ... - see below)
<xsl:apply-templates>
...
</xsl:apply-templates>
</xsl:templates>
Imagine this function can be called on a tag <root> and <child> is a child
of that tag. So each time when 'generalTemplate' is called, a template which
matches the tag 'child' will be called too:
<xsl:template match="child">
...
</xsl:template>
As I mentioned above, 'generalTemplate' can be called on several places in
the template, because everytime I need the same calculations, ... on the
'root'-tag. But each time (in every other place), I actually need different
manipulations on the 'child'-tag.
A nice way to accomplish would be this, but this doesn't work since mode
should be a qname, and not an xpath expression:
<xsl:template name="generalTemplate>
<xsl:param name="p"/>
<xsl:apply-templates mode="$p">
...
</xsl:apply-templates>
</xsl:templates>
<xsl:template match="child" mode="situation1">...</>
<xsl:template match="child" mode="situation2">...</>
...
Then I came up with the following:
<xsl:template name="generalTemplate>
<xsl:param name="p"/>
<xsl:apply-templates>
<xsl:with-param name="p" select="$p"/>
...
</xsl:apply-templates>
</xsl:templates>
<xsl:template match="child">
<xsl:if test="$p = 'situation1'>
...
<xsl:if test="$p = 'situation2'>
...
...
</xsl:template>
Actually, this works perfect, but I don't like it.
So my question is now: are there any other outcomes for this situation,
which do this on a more generic way?
Thanks for your time,
Peter
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list