Re: [xsl] Including a JSP file in an XSL

Subject: Re: [xsl] Including a JSP file in an XSL
From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx>
Date: Tue, 13 Feb 2001 13:21:14 +0000
Hi Lyndall,

> I'm trying to do pagination for printing HTML using XML/XSL
> transformations... A header and footer is required for each page.
> Using the <xsl:for-each > command, I have been able to get the
> header/footer thing happening, but as I have several pages, which
> all require the same header and footer, instead of copying the
> header/footer into each XSL, I would like to be able to reference
> separate jsp files. The header and footer are made up of html tables
> with text and images.

You might well be able to achieve what you're after using just XSLT.

For one thing, if you do:

  <xsl:copy-of select="document('header.xml')" />

then the contents of header.xml will be copied into the right place.
If header.xml is well-formed XHTML, then it should work fine.  But it
may well be that it isn't - that it has two top-level elements, for

An alternative is an XML entity:

<!DOCTYPE xsl:stylesheet [
<!ENTITY header SYSTEM 'header.xml'>

But it sounds like you should put some XSLT templates creating the
header and footer that you want into a separate stylesheet that you
then import into all the stylesheets that use them.  For example:

--- header-and-footer.xsl ---
<xsl:template name="insert-header">
   <!-- loads of tables and so on -->

--- stylesheet.xsl ---
<xsl:stylesheet version="1.0"

<xsl:import href="header-and-footer.xsl" />

   <xsl:call-template name="insert-header" />


> I have tried using <%@ include file="header.jsp" %> (which is
> rejected by the processor) and replacing the % with the relevant
> representation doesn't help either (not that I really expected it
> to!)

The XSLT processor has no way of recognising JSP instructions, so you
can't use them to automatically include things in your XSLT
stylesheet.  You need to use one of the methods above if that's what
you want.

If you want to have a stylesheet that includes JSP instructions in the
*output* (which can then be processed to include the relevant
information), then I think this is one of the very rare situations in
which disable-output-escaping is useful. The 'tags' you are creating
aren't proper XML, so you have to escape the less-than sign to
indicate that it isn't the start of an XML tag:

  &lt;%@ include file="header.jsp" %>

But that will be outputted with the escaped syntax as well, and
therefore not recognised by whatever JSP processor looks at the
output.  Instead, use:

  <xsl:text disable-output-escaping="yes">
     &lt;%@ include file="header.jsp" %>

This will produce the JSP instruction in the output, which can then be
processed to include the header and footer.

I hope that helps,


Jeni Tennison

 XSL-List info and archive:

Current Thread