Re: [xsl] Multiple template rules, in different files, matching same element ... how to invoke a template rule in a specific XSLT file?

Subject: Re: [xsl] Multiple template rules, in different files, matching same element ... how to invoke a template rule in a specific XSLT file?
From: "Christophe Marchand cmarchand@xxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 11 Apr 2019 16:05:03 -0000
We do not duplicate code. Never. So we re-use a lot existing code. And so, we have a lot of xsl:import.

Each xsl module has it's own "main" mode, and a template match='/' with no mode that apply-templates mode="own-main-mode"

The "master" xsl has also a template match="/" with no mode, which has the top-most priority, and overwrites all other.

When we want to specify a specific call, we apply-templates with the desired mode. We didn't find a better way to do it.

Best,
Christophe

Le 11/04/2019 C 15:47, Costello, Roger L. costello@xxxxxxxxx a C)critB :
Hi Folks,

I have multiple template rules that match on airport/row and the template rules all have the same mode:

<xsl:template match="airport/row" mode="A-to-B">
     ...
</xsl:template>

However, they are located within different XSLT files, in different folders.

I have a master XSLT file that includes the XSLT files:

<xsl:include href="../airport-identifier/transform-identifier.xsl"/>
<xsl:include href="../airport-location/transform-location.xsl"/>
<xsl:include href="../airport-magnetic-variation/transform-magnetic-variation.xsl"/>

In this master XSLT file I have a template rule that wants to (for example) invoke the template rule for airport/row that is in airport-location/transform-location.xsl

How do you recommend doing this?

I could customize the mode in each XSLT file, e.g.,

In airport-identifier/transform-identifier.xsl do this:
<xsl:template match="airport/row" mode="identifier-A-to-B">

In airport-location/transform-location.xsl do this:
<xsl:template match="airport/row" mode="location-A-to-B ">

In airport-magnetic-variation/transform-magnetic-variation.xsl do this:
<xsl:template match="airport/row" mode="magnetic-variation-A-to-B ">

And then invoke the desired template rule by specifying the appropriate mode, e.g.,

<xsl:apply-templates select="airport/row" mode="location-A-to-B" />

That approach seems awful.

Is there a better approach?

/Roger

Current Thread