xslt包含/导入路径

时间:2011-07-26 07:27:14

标签: php xslt

我在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.xsldir1/dir2/dir3/dir4/是静态的(永远不会改变)。

包含所有包含的单独模板不适合,因为每个模板需要不同的文件,并且在一段时间后很难理解包含的内容和位置。

我想也许可以用xml:base <xsl:import href="layout.xsl" xml:base="dir1/dir2/dir3/dir4/" />做一些事情,但不知道怎么做。

由于

2 个答案:

答案 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语句必须位于样式表元素下面的顶层。