我在PHP框架中使用XSLT作为模板引擎。一些XSLT文件位于不同的文件夹中,因此如果我想包含/导入xslt模板而不是主目录,我必须输入很多:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="dir1/dir2/dir3/dir4/layout.xsl"/>
<xsl:template name="content">
<html>
<head>
<title>action.xsl</title>
</head>
<body>
test
</body>
</html>
</xsl:template>
</xsl:stylesheet>
有没有简单的方法来减少这个dir1/dir2/dir3/dir4/layout.xsl
? dir1/dir2/dir3/dir4/
是静态的(永远不会改变)。
包含所有包含的单独模板不适合,因为每个模板需要不同的文件,并且在一段时间后很难理解包含的内容和位置。
我想也许可以用xml:base
<xsl:import href="layout.xsl" xml:base="dir1/dir2/dir3/dir4/" />
做一些事情,但不知道怎么做。
由于
答案 0 :(得分:1)
[XSLT 1.0]
你不能像xsl:import
这样使用:
<xsl:import href="$mypath"/>
因为href
总是评估字符串。也不允许使用AVT。
一种可能的解决方案是定义目标文件夹中的特定样式表,它提供所有必需的导入(在此样式表中,您将需要简单的相对路径)。通过这种方式,主xsl将只需要导入该单个特定样式表。
例如,transformA.xsl
将导入ir1/dir2/dir3/dir4/transformA_imports.xsl
,这将导入所有必需的文件,例如layout.xsl
答案 1 :(得分:1)
<xsl:import href="layout.xsl" xml:base="dir1/dir2/dir3/dir4/" />
可以在XSLT 2.0中使用,但不能在1.0中使用。
您是否在XSLT 2.0中尝试过(例如在Saxon中),如果是这样,结果是什么?
您不能将import语句放入模板中;每个import语句必须位于样式表元素下面的顶层。