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>
--~--