[xsl] Suggestions to improve my XSL writing style

Subject: [xsl] Suggestions to improve my XSL writing style
From: Jacobus Reyneke <jacobusreyneke@xxxxxxxxx>
Date: Fri, 28 Jan 2011 10:20:52 +0200
Good day,

The XSL I wrote below works, but I'm looking for ways to improve my
coding style. Is this a bad way of writing style sheets? - in
particular the fact that I call "apply-templates" about a million
times.

Also, I could not get the Act numbering to be added in the Scene
title, so I left it in the Act element, where I would have liked a
Scene title like "Act 1, Scene 1" but using position() from within the
scene match gave me strange numbering.

Input XML:
<?xml version="1.0" encoding="UTF-8"?>
<play>
 <title>Tragedy of MACBETH</title>
 <act>
  <scene>
   <stage-direction>An open place. Thunder and lightning. Enter three
Witches</stage-direction>
   <speech><speaker>1ST WITCH</speaker>
   <line>When shall we three meet again</line>
   <line>In thunder, lightning, or in rain?</line>
   </speech><speech><speaker>2ND WITCH</speaker>
   <line>When the hurly-burly's done</line>
   <line>When the battle's lost and won.</line>
   </speech><speech><speaker>3RD WITCH</speaker>
   <line>That will be ere the set of sun.</line>
   </speech><speech><speaker>1ST WITCH</speaker>
   <line>Where the place?</line>
   </speech><speech><speaker>2ND WITCH</speaker>
   <line>Upon the heath.</line>
   </speech><speech><speaker>3RD WITCH</speaker>
   <line>There to meet with Macbeth. <stage-action>Cat
meows.</stage-action></line>
   </speech><speech><speaker>1ST WITCH</speaker>
   <line>I'm coming, Graymalkin. <stage-action>Toad
croaks.</stage-action></line>
   </speech><speech><speaker>2ND WITCH</speaker>
   <line><stage-direction-in-dialogue>to Third
Witch</stage-direction-in-dialogue> Toad's
    calling.</line>
   </speech><speech><speaker>3RD WITCH</speaker>
   <line>I'm coming now.</line>
   </speech><speech><speaker>ALL</speaker>
   <line>Fair is foul, and foul is fair;</line>
   <line>Hover through the fog and filthy air. <stage-action>They
vanish.</stage-action></line>
  </speech></scene>
</scene>
</act>
</play>

XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:mbp="http://www.amazon.com/amazonything";
exclude-result-prefixes="xs" version="2.0">
    <xsl:template match="play">
        <html>
            <body>
            <xsl:apply-templates></xsl:apply-templates>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="title">
        <h1><xsl:apply-templates></xsl:apply-templates></h1>
    </xsl:template>
    <xsl:template match="act">
        <mbp:pagebreak />
        <h1>Act <xsl:number></xsl:number></h1>
        <xsl:apply-templates></xsl:apply-templates>
    </xsl:template>
    <xsl:template match="scene">
        <mbp:section>
        <h2>Scene <xsl:number></xsl:number></h2>
        <xsl:apply-templates></xsl:apply-templates>
            </mbp:section>
    </xsl:template>
    <xsl:template match="stage-direction">
        <hr/>
        <p><em>
        <xsl:apply-templates></xsl:apply-templates>
        </em></p>
        <hr/>
    </xsl:template>
    <xsl:template match="speech">
        <p width="-40pt" text-indent="-40pt">
            <xsl:apply-templates></xsl:apply-templates>
        </p>
    </xsl:template>
    <xsl:template match="speaker">
        <xsl:apply-templates></xsl:apply-templates>
    </xsl:template>
    <xsl:template match="line">
        <xsl:text>
</xsl:text><xsl:apply-templates></xsl:apply-templates><br/>
    </xsl:template>
    <xsl:template match="stage-action">
        ---
         <xsl:apply-templates></xsl:apply-templates>
    </xsl:template>
 </xsl:stylesheet>

Current Thread