xsl-list
[Top] [All Lists]

Re: [xsl] XHTML templating (best method)

2007-01-26 10:40:09
Michael Kay wrote:


That would be a better way around but I can't see a way to wrap the page-specific stylesheets in the common one without breaking the common stylesheet in two stylesheets, top and bottom, or am I missing the point.

Something like this:

[specialCase.xsl]

<xsl:stylesheet>

<xsl:import href="generalCase.xsl"/>

<xsl:template match="/" mode="page-specific">
 ... generate page-specific content ...
</xsl:template>

</xsl:stylesheet>

[generalCase.xsl]

<xsl:stylesheet>

<xsl:import href="generalCase.xsl"/>

<xsl:template match="/">
 <boilerplate>
   <xsl:apply-templates select="." mode="page-specific"/>
 </boilerplate>
</xsl:template>

</xsl:stylesheet>

The detail can vary, depending on how much common structure there is between
the different XML source documents. As shown above, it works with no common
structure at all: the only thing the general-purpose stylesheet does it to
wrap a standard boilerplate around the page-specific output.
That works great thanks! Except generalCase.xsl should not have the import. I renamed mine to layout.xsl (aka generalCase.xsl) and list.xsl (aka specialCase.xsl).
I now need to find out why it works, ie. what mode is :)

[layout.xsl]

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
 <xsl:template match="/">
   <html>
     <head>
       <title>Something</title>
     </head>
     <body>
       <xsl:apply-templates select="." mode="view"/>
     </body>
   </html>
 </xsl:template>
</xsl:stylesheet>

[list.xsl]

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
 <xsl:import href="layout.xsl"/>
 <xsl:template match="/" mode="view">
   <h1>List of People</h1>
   <xsl:for-each select="/data/people/person">
     <div id="person" style="margin-bottom: 10px;">
       <xsl:value-of select="@id"/>
       <BR/>
       <xsl:value-of select="firstname"/>
       <BR/>
       <xsl:value-of select="lastname"/>
       <BR/>
     </div>
   </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

[data.xml]

<?xml version="1.0" encoding="UTF-8"?>
<data>
   <title>List of people</title>
   <people>
       <person id="1">
           <firstname>Harry</firstname>
           <lastname>Love</lastname>
       </person>
       <person id="2">
           <firstname>Tim</firstname>
           <lastname>Burton</lastname>
       </person>
   </people>
</data>

Michael Kay
http://www.saxonica.com/


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--







--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--