For most applications, I think <xsl:next-match> is more likely to do what
you want than <xsl:apply-imports>. It's certainly easier to understand.
xsl:next-match simply defines an ordering of all the template rules for a
mode, ordered first by precedence, then by priority, then by document order;
it finds the current template in that list, and calls the next one down the
list that matches the current node.
xsl:apply-imports is a bit more complicated; it only considers rules in an
"imported stylesheet layer", where a layer means a stylesheet that you
import, plus all modules that include or are included by that module.
The big advantage of next-match is that it allows you to invoke
lower-priority templates in the same module.
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Johannes Neubauer
[mailto:johannes(_dot_)neubauer(_at_)cs(_dot_)tu-dortmund(_dot_)de]
Sent: 04 June 2008 16:41
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] <xsl:apply-imports> and rules with higher
priority; And more!
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi,
The XSLT 2.0 Programmers Reference says, that
<xsl:apply-imports> calls the next template rule with lower
stylesheet level (is that the same like stylesheet layer?)
matching the same node as the current template.
Furthermore it does NOT call template rules with lower
priority in imported stylesheets. What is about rules with
higher priority in an imported stylesheet with lower import
precedence?
In addition: Does <apply-imports> relate to (one of) all
stylesheets with lower import precedence or only to the ones
imported by the current ~ stylesheet (or stylesheet layer)? I
know this works:
A import C
A include B
=> (import precedences: A = 2, B = 2, C = 1) B and A are on
the same layer, so <apply-imports> in A or B can involve C.
But does this work to?:
A import C
A import B
=> (import precedences: A = 3, B = 2, C = 1) B has higher
import precedence than C. Does that mean <apply-imports> in B
can call a template rule in C?
Last but not least: I'd like to call <apply-imports> and if
there was another rule with higher priority, but a lower
import precedence I'd like to return the result of it, else
it should return the result of this template. But I don't
know how to access the information if there was another matching rule.
I like to change the rule that import precedence decides
which rule matches before rule priority like this:
Stylesheet B.xsl & C.xsl:
<xsl:template match="test" priority="1 (: for B, 2 for C :)">
<xsl:choose>
<xsl:when test="there is another template rule
for apply-imports with higher priority">
<xsl:apply-imports/>
</xsl:when>
<xsl:otherwise>
<!-- sequence constructor for B or C
respectively -->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Stylesheet A.xsl:
<xsl:import href="C.xsl"/>
<xsl:import href="B.xsl"/>
<xsl:template match="/" >
<apply-templates/>
</xsl:template>
wfg,
Jonny.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFIRreKGaEJacf6i/cRAk3GAJwMzrLBjQyByBqd3wVCL6qGeG3dzgCeMEQK
7NRuOtmAJH0WH2UKxv43Zkc=
=mb58
-----END PGP SIGNATURE-----
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--