我有xsl,我想包含另一个包含javascript文件脚本标签的xsl
主xsl:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/Reflection">
<xsl:text disable-output-escaping='yes'><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "SiteRef_getCSS?CSSName=Site/xhtml1-transitional.dtd"></xsl:text>
<html>
<head>
<link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/jquery-ui.css" type="text/css"/>
<link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/jquery.plupload.queue.css" type="text/css" media="screen"/>
<xsl:include href="CommonIncludes.xsl"/>
<!--<script type="text/javascript" src="SiteRef_getJS?JSName=jquery/jquery-1.9.1.min.js"/>-->
<script type="text/javascript" src="SiteRef_getJS?JSName=jquery/jquery-ui.js"/>
</head>
</html>
CommonIncludes.xsl:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="*">
<link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/site.css" type="text/css"/>
<script type="text/javascript" src="SiteRef_getJS?JSName=jquery/jquery-1.9.1.min.js"/>
<script type="text/javascript" src="SiteRef_getJS?JSName=Site/common.js"/>
<script type="text/javascript" src="SiteRef_getJS?JSName=Site/MessagesConstants.js"/>
<script type="text/javascript" src="SiteRef_getJS?JSName=Site/win_functions.js"/>
<script type="text/javascript" src="SiteRef_getJS?JSName=Site/resizeFunctions.js"/>
</xsl:template>
</xsl:transform>
我遇到了这个异常: javax.xml.transform.TransformerConfigurationException:无法编译样式表
显然,我的CommonIncludes.xsl编写不正确
有人可以告诉我我做错了什么吗?
答案 0 :(得分:0)
您需要在任何模板之前将xsl:include
移动到样式表的开头。这足以让XSLT处理器满意。但它不会在包含的文件中调用或应用模板来输出link
和script
元素。要实现这一目标,您可以使用
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="CommonIncludes.xsl"/>
<xsl:template match="/Reflection">
<xsl:text disable-output-escaping='yes'><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "SiteRef_getCSS?CSSName=Site/xhtml1-transitional.dtd"></xsl:text>
<html>
<head>
<link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/jquery-ui.css" type="text/css"/>
<link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/jquery.plupload.queue.css" type="text/css" media="screen"/>
<xsl:apply-imports/>
但是,我会将导入文件中的模板匹配更改为更专业的内容,例如<xsl:template match="/*">...</xsl:template>
或<xsl:template match="/Reflection">..</xsl:template>
。
或者使用命名模板并将其调用到要包含元素的位置。
xsl:output
允许您指定文档类型和URL,并通过XSLT处理器对这些输出进行序列化,不需要手动执行。
以下是执行apply-imports
和xsl:import
的最小但完整的示例:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="test2014050802.xsl"/>
<xsl:template match="/Reflection">
<html>
<head>
<link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/jquery-ui.css" type="text/css"/>
<link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/jquery.plupload.queue.css" type="text/css" media="screen"/>
<xsl:apply-imports/>
<script type="text/javascript" src="SiteRef_getJS?JSName=jquery/jquery-ui.js"/>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
</xsl:transform>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/Reflection">
<link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/site.css" type="text/css"/>
<script type="text/javascript" src="SiteRef_getJS?JSName=jquery/jquery-1.9.1.min.js"/>
<script type="text/javascript" src="SiteRef_getJS?JSName=Site/common.js"/>
<script type="text/javascript" src="SiteRef_getJS?JSName=Site/MessagesConstants.js"/>
<script type="text/javascript" src="SiteRef_getJS?JSName=Site/win_functions.js"/>
<script type="text/javascript" src="SiteRef_getJS?JSName=Site/resizeFunctions.js"/>
</xsl:template>
</xsl:transform>
与
对战时<Reflection/>
我得到了输出
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/jquery-ui.css" type="text/css">
<link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/jquery.plupload.queue.css" type="text/css" media="screen">
<link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/site.css" type="text/css"><script type="text/javascript" src="SiteRef_getJS?JSName=jquery/jquery-1.9.1.min.js"></script><script type="text/javascript" src="SiteRef_getJS?JSName=Site/common.js"></script><script type="text/javascript" src="SiteRef_getJS?JSName=Site/MessagesConstants.js"></script><script type="text/javascript" src="SiteRef_getJS?JSName=Site/win_functions.js"></script><script type="text/javascript" src="SiteRef_getJS?JSName=Site/resizeFunctions.js"></script><script type="text/javascript" src="SiteRef_getJS?JSName=jquery/jquery-ui.js"></script></head>
<body></body>
</html>
并且没有编译错误。
至于xsl:output
,如果需要,让我们在另一个问题中解决这个问题。