[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Problem of template priority

Subject: Re: Problem of template priority
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Wed, 28 Apr 2010 18:34:09 -0700
Re:  Problem of template priority
At 2010-04-29 01:41 +0100, Fabre Lambeau wrote:
I have a complex XSLT stylesheet, which does import some other ones in order to refine/delegate some of the work depending on the type of data it finds.
This works by using templates with modes, and matching rules that are more specific, hence increasing their default priority. However, in the main sheet (the one that imports the others), there is a case where I want to force the most generic template to be applied, after which it can call the others.

Well, importance trumps priority. The lowest priority template in the importing stylesheet is more important than the highest priority template in the imported stylesheet. So if I understand you above, that's what you get in XSLT.

However, no matter what I do with the priority attribute, my processor seems to always select the template from the imported stylesheet.

That surprises me.

Having said that, I tried to create a simple example (below), and there I get just the opposite effect: I can never get the imported template to apply instead of the generic one, even though it is more selective

=== Main sheet ===

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="./special.xsl"/>

    <xsl:template match="/">
        <xsl:apply-templates mode="process-record"/>

    <xsl:template mode="process-record" match="feed" priority="-9">

=== Imported sheet ===

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template mode="process-record" match="feed[@type='special']" priority="10">

=== Document ===

<feed type="special">

With this example, no matter what value I give to the priority attributes, I always get the following result:


Which is exactly what I would expect: the importing stylesheet is adding the <helloworld> and the <xsl:next-match/> is then reapplying the last-matched node as if the last matched template didn't exist ... and so the <specialone> is being added under <helloworld>.

The relative priorities are irrelevant. The importance trumps any use of priority.

Any idea what I'm doing wrong?

I'm lost as to what you were wanting to do "right". You say:

  there is a case where I want to force the most generic
  template to be applied, after which it can call the others

Isn't that what you are doing above? The template in the importing stylesheet is being applied and during that it "calls" the template in the imported stylesheet.

What result *exactly* did you want for the source document above?

. . . . . . . . . . . Ken

XSLT/XQuery training:         San Carlos, California 2010-04-26/30
Principles of XSLT for XQuery Writers: San Francisco,CA 2010-05-03
XSLT/XQuery/UBL/Code List training: Trondheim,Norway 2010-06-02/11
Vote for your XML training:   http://www.CraneSoftwrights.com/s/i/
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal

Current Thread


Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
First Name
Last Name
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.