如何在XSLT中包含JavaScript文件

24

我该如何在xslt文件中包含/导入JavaScript文件/库.


1
好问题,+1。你想要将JavaScript代码作为一组扩展函数在转换期间调用,还是想要生成引用JavaScript文件的HTML代码,或者两者都要?所有这些都是有效且有意义的情况。 - Dimitre Novatchev
4个回答

25

如果你需要在转换中使用JavaScript(例如,它包含一组在转换中被调用的扩展函数),那么你需要将JavaScript内容(至少一个JavaScript文件的内容)放在一个单独的XSLT样式表文件中,并使用适当的扩展元素(例如 <msxml:script>)作为包含JavaScript代码的文本节点的父元素。

这里是一个非常简单的例子,使用任何Microsoft XSLT处理器(MSXML3/4/6、XslCompiledTransform或XslTransform):

文件 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>

导入 JavaScript 的文件 XSL-Main.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">
 <xsl:import href="XSL-JS.xsl"/>

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

</xsl:stylesheet>

当将包含在XSL-Main.xsl文件中的转换应用于任何XML文档(未使用/忽略),就会产生所需的正确结果

A B C

完全不同的情况是,如果你只想用你的XSLT应用程序生成引用给定Javascript文件的HTML文件

那么你可以在你的XSLT代码中包含它,并将其作为输出的一部分直接生成:

<script type="text/javascript" src="SomePath/SomeFileName.js"></script> 

当JavaScript包含//注释时,它是否有效? - undefined
@U.Windl,你还在使用<msxsl:script>吗?是的,它应该可以正常工作。 - undefined
你说得对:我上周试过了,脚本中的换行符出现了问题,所以注释会忽略脚本的其余部分。但今天我又试了一下,换行符被保留了,所以按照https://stackoverflow.com/a/30332909/6607497中描述的方法是有效的! - undefined

13

如果您想在生成的HTML文件中包含Javascript源代码,则需要使用script标签。但是,许多XSLT处理器会在标签为空时出现问题。如果一切看起来都很正常,但是当您添加脚本标签时得到空输出,请尝试在标签内插入一个不间断空格,如下所示:

<script type="text/javascript" src="SomePath/SomeFileName.js">&#160;</script> 

哇,太棒了!谢谢,我一直在使用.NET XsltTransform库时遇到问题。 - Rameez Ahmed Sayad
这是非常重要的信息。我非常幸运能够注意到这一点。我一直想不通为什么我的样式表不能正确转换。 - Glenn Carver
最后,有没有办法告诉变压器预期空标签?我真的很讨厌不得不找到所有空标签并用空格填充它们。我正在使用C#和来自System.Xml的XslCompiledTransform进行此操作。 - Glenn Carver
我也找到了我的问题的答案:https://dev59.com/-rD3oIgBc1ULPQZFBmyL - Glenn Carver

13

但是这似乎没有考虑到“在XSLT中”的要求:当我尝试时,所有内容都被放在一行中,而且由于第一行是注释,所以在HTML中没有可用的内容。 - undefined

0
为了使用纯JavaScript或JS中的任何框架,您需要使用一个外部的PHP页面。在PHP处理完成后,您可以在其下方以格式编写JS代码。您可以直接通过DOM对页面产生影响。
<?php

// Do XLST Loading here

?>

<script>
//Do javascript here
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接