From: Graham Hannington <Ghannington(_at_)csl(_dot_)com>
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: XSLT processor adds unwanted HTML attributes
Date: Sun, 16 Feb 2003 13:22:48 -0000
I'm splitting a single, large XML (well, XHTML) file into multiple files,
breaking at the <h1> elements.
I'm using the following stylesheet:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
version="1.1" >
<xsl:preserve-space elements="*" />
<xsl:output method="xml" />
<xsl:template match="h1">
<xsl:variable name="file_name" select="concat(., '.htm')" />
<xsl:message>Splitting <xsl:copy-of select="$file_name" />
...</xsl:message>
<xsl:document href="{$file_name}" >
<html>
<xsl:text>
</xsl:text>
<head>
<xsl:text>
	</xsl:text>
<link rel="StyleSheet" href="style/default.css" />
<xsl:text>
	</xsl:text>
<script src="style/default.vbs" language="VBScript"></script>
<xsl:text>
</xsl:text>
</head>
<xsl:text>
</xsl:text>
<body>
<xsl:text>
</xsl:text>
<xsl:copy-of select="." />
<xsl:text>
</xsl:text>
<xsl:call-template name="followingElements"/>
<xsl:text>
</xsl:text>
</body>
<xsl:text>
</xsl:text>
</html>
</xsl:document>
</xsl:template>
<xsl:template name="followingElements">
<xsl:for-each
select="following-sibling::*[1][not(self::h1)]">
<xsl:copy-of select="." />
<xsl:text>
</xsl:text>
<xsl:call-template name="followingElements"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
(I wish I knew a better way to have line breaks than to code all that 

stuff. Maybe call a named template each time instead, I guess. Stuart
Brown: you'll probably recognize some of your code in that followingElements
template... thanks again :-)
Here's the problem (with apologies, I realize this dips into XSLT
processor-specific behaviour):
- MSXSL (the command-line interface to MSXML) appears to not support the
<xsl:document> element.
- Saxon works fine, but - here's the annoying bit - adds colspan and rowspan
attributes to my <td> tags (even though I'm specifying XML as the output
method). I interpret Saxon as doing something "naughty" here, or am I wrong?
How do I stop these well-meaning additions? (To - hopefully - avoid flames
for discussing processor-specific implementation issues: I don't know for
sure that this is a Saxon-specific thing... it could be that XSLT processors
in general are allowed to do this stuff unless they're told otherwise; I
just don't know how to tell them otherwise ;-)
Graham Hannington
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list