Php xslt包含/导入路径
我在PHP框架中使用XSLT作为模板引擎。一些XSLT文件位于不同的文件夹中,因此,如果我想包含/导入XSLT模板,而不是从主目录中,我必须键入很多内容:Php xslt包含/导入路径,php,xslt,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:templat
<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>
action.xsl
测试
有没有简单的方法来减少这个dir1/dir2/dir3/dir4/layout.xsl
<代码>dir1/dir2/dir3/dir4/是静态的(从不更改)
单独使用包含所有内容的模板是不合适的,因为每个模板需要不同的文件,并且在一段时间后,很难理解包含的内容和位置
我想也许可以使用xml:base
,但不知道如何操作
谢谢[XSLT 1.0]
例如,不能像这样使用xsl:import
:
<xsl:import href="$mypath"/>
因为href
的计算结果始终为字符串。AVT也是不允许的
一种可能的解决方案是在目标文件夹中定义一个特定的样式表,它提供所有必需的导入(在这个样式表中,您需要简单的相对路径)。这样,主xsl将只需要导入单个特定的样式表 例如,
transformA.xsl
将导入ir1/dir2/dir3/dir4/transformA\u imports.xsl
,它将导入所有必需的文件,例如layout.xsl
<xsl:import href="layout.xsl" xml:base="dir1/dir2/dir3/dir4/" />
可以在XSLT2.0中使用,但不能在1.0中使用
您是否在XSLT2.0(例如在Saxon)中尝试过它,如果是,结果如何
不能将导入语句放入模板中;每个导入语句必须位于样式表元素下面的顶层。我使用PHP
XSLTProcessor
转换xslt模板(我知道PHP只支持xslt 1.0),但是xml:base
对我来说很好。问题是我必须始终指定xml:base
。也许可以只在一个地方设置xml:base
?@Tomas,当你说“一直”时,你的意思是在每个import语句中?如果是这样,您可以将xml:base放在xsl:stylesheet
元素上,所有子体都将继承它。(另外,我不知道XSLT1.0处理器可以处理xml:base,但可能它是一个允许的扩展,或者PHP的处理器在这方面不一致。)