Subject: RE: [xsl] <xsl:apply-imports> and rules with higher priority; And more! From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Wed, 4 Jun 2008 16:55:18 +0100 |
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.neubauer@xxxxxxxxxxxxxxxxx] > Sent: 04 June 2008 16:41 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > 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-----
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] <xsl:apply-imports> and r, David Carlisle | Thread | Re: [xsl] <xsl:apply-imports> and r, Johannes Neubauer |
Re: [xsl] XQuery basics, David Carlisle | Date | Re: [xsl] Multi part mime message i, Mukul Gandhi |
Month |