[xsl] xsl:apply-templates to all but...

Subject: [xsl] xsl:apply-templates to all but...
From: "Bob DuCharme" <bob@xxxxxxxx>
Date: Fri, 17 Feb 2006 08:46:00 -0500 (EST)
xsl:apply-templates to all but...

I was curious about opinions on a processing trick I've been doing lately.
The issue: if element w has content model (x,y,z) and I want to output its
contents in (y,z,x) order, I could do this:

  <xsl:template match="w">
    <xsl:apply-templates select"y"/>
    <xsl:apply-templates select"z"/>
    <xsl:apply-templates select"x"/>
  </xsl:template>

But if something later gets added to that content model, this template
rule will ignore it. If @select could take a regular expression more
complex than * or ns:*, that would be cool, but that's not an option. So
here's what I've done:

  <xsl:template match="w">
    <xsl:apply-templates select"y" mode="output"/>
    <xsl:apply-templates select"*"/>
  </xsl:template>

  <xsl:template match="y" mode="output">
    <!-- process normally -->
  </xsl:template>

  <xsl:template match="y"/>

x and z get processed normally. (In real life, this was with larger, more
complex content models and template rules.)

Has anyone else done this? Or something similar, and if different, how so?

thanks,

Bob DuCharme

Current Thread