Re: [xsl] Javascript as an Include file in xsl

Subject: Re: [xsl] Javascript as an Include file in xsl
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Wed, 10 Oct 2001 19:13:00 +0100
Hi Tom,

> I been brought into an existing project that is XML/XSL based. Even
> with limited XSL experience, I see a huge maintenance nightmare
> evolving. According to the consultants working on the project with
> us, they have found no way to put needed client side JavaScript
> functions into an include file. So all JavaScript functions are
> being duplicated on every page. Since the maintenance of this
> product will fall on my shoulders, I want to find a better solution.
> Is there a way to include a .js file that the XSLT parser will
> accept? Thank you for your time.

It's unclear from your description whether you're talking about
including the Javascript in the *output* of the transformation (which
I assume is HTML) or in the stylesheet itself (i.e. you're using
msxsl:script to get extension functions).

If you're generating HTML, then you can link to an external JavaScript
document by generating a script element in the same way as you would
if you were writing the HTML document directly. In other words, in
your XSLT you should have a literal result element that looks
something like:

  <script language="javascript" type="text/javascript"
          href="script.js" />

The href is likely to be resolved relative to the XML document that's
being transformed (at a guess), not the stylesheet.

If you're using msxsl:script to define extension functions, then
they're right, msxsl:script doesn't have the facility to point to an
external Javascript file. However, you can put the msxsl:script
element in its own stylesheet (e.g. script.xsl) and then include it
into as many other stylesheets as you like using xsl:include:

<xsl:include href="script.xsl" />

Alternatively, you could use XML entities. Wrap the content of the
Javascript file in a CDATA section (so that you don't have to escape
all the <s and &s within it), and then declare the entity in the
stylesheet that you want to use it in:

<!DOCTYPE xsl:stylesheet [
<!ENTITY script SYSTEM 'script.js'>
]>

and then use &script; to insert the script into the file as desired.

I hope that helps,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread