Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php xslt包含/导入路径_Php_Xslt - Fatal编程技术网

Php 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

我在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>

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的处理器在这方面不一致。)