24

How can I include/import javaScript file/libary in xslt file.

jasin_89
  • 1,993
  • 7
  • 30
  • 41
  • 1
    Good question, +1. Do you want to use the javascript code as a set of extension functions that are called during the transformation, or do you want to generate HTML code that references a javascript file, or both? All these are valid and meaningful scenarios. – Dimitre Novatchev Sep 16 '11 at 12:52

4 Answers4

25

If you need to use the javascript in the transformation (for example, it contains a set of extension functions that are called within the transformation), you need to put the javascript contents (at least that of one javascript file) in a separate XSLT stylesheet file, using the proper extension element (such as <msxml:script>) as the parent of the text-node that contains the javascript code.

Here is a very simple example, using any Microsoft XSLT processor (MSXML3/4/6, XslCompiledTransform or XslTransform):

file XSL-JS.xsl:

<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      xmlns:user="http://mycompany.com/mynamespace">

 <msxsl:script language="JScript" implements-prefix="user">
   function xml(nodelist) {
      return "A B C";
   }
 </msxsl:script>
</xsl:stylesheet>

File XSL-Main.xsl that is importing the javascript:

<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      xmlns:user="http://mycompany.com/mynamespace">
 <xsl:import href="XSL-JS.xsl"/>

 <xsl:template match="/">
   <xsl:value-of select="user:xml(.)"/>
 </xsl:template>

</xsl:stylesheet>

When the transformation, contained in the file XSL-Main.xsl is applied on any XML document (not used/ignored), the wanted, correct result is produced:

A B C

A completely different case is if you just want to generate with your XSLT application an HTML file that references a given Javascript file.

Then you include this in your XSLT code and generate this literally as part of the output:

<script type="text/javascript" src="SomePath/SomeFileName.js"></script> 
Dimitre Novatchev
  • 240,661
  • 26
  • 293
  • 431
13

If you are trying to include a Javascript source in the generated HTML file, the script tag is the way. But many XSLT processors will choke if the tag is empty. If everything looks fine but you are getting empty output when you add the script tags, try inserting a non-breaking space within the tag as in:

<script type="text/javascript" src="SomePath/SomeFileName.js">&#160;</script> 
bitfiddler
  • 2,095
  • 1
  • 12
  • 11
  • wow awesome ! Thanks , I was having issues using .NET XsltTransform libraries working . – Rameez Ahmed Sayad Dec 09 '13 at 07:05
  • This is very important information. I am beyond lucky to have noticed this. For the life of me I couldn't figure out why my stylesheet doesn't transform right. – Glenn Carver Jan 10 '22 at 07:34
  • To finish up - is there a way to tell the transformer to expect empty tags? I'd REALLY hate to have to find all empty tags and fill them with empty spaces. I'm doing this in C# and using XslCompiledTransform from System.Xml – Glenn Carver Jan 10 '22 at 07:36
  • Found an answer to my question too https://stackoverflow.com/questions/70658913/ – Glenn Carver Jan 14 '22 at 10:14
12

This is what I did and it worked for me.

<script>
<![CDATA[
   //ADD SCRIPT HERE.
]]>
</script>

Reference: https://www.w3schools.com/xml/dom_nodes_traverse.asp

Petter Friberg
  • 21,252
  • 9
  • 60
  • 109
Binary01
  • 205
  • 3
  • 10
0

In order to use vanilla Javascript, or any framework in JS, you need to use an outer page of PHP. After your PHP processing, you can write the JS below it in a <script></script> format. You can directly cause effects on the page from there with the DOM.

<?php

// Do XLST Loading here

?>

<script>
//Do javascript here
</script>
thexiv
  • 27
  • 9