Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/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 合并包含xsl:include和xsl:import的多个XSLT样式表_Php_Xml_Xslt_Merge - Fatal编程技术网

Php 合并包含xsl:include和xsl:import的多个XSLT样式表

Php 合并包含xsl:include和xsl:import的多个XSLT样式表,php,xml,xslt,merge,Php,Xml,Xslt,Merge,我有一个XSL文件(template.XSL),如下所示: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="1.xsl" /> <xsl:import href="2.xsl" /> <xsl:import href="3.xsl"/> <

我有一个XSL文件(template.XSL),如下所示:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:import href="1.xsl" />
<xsl:import href="2.xsl" />
<xsl:import href="3.xsl"/>
<xsl:import href="4.xsl"/>

...

...
该文件在我测试过的所有非webkit浏览器上都可以正常工作。不过,我希望它也能在webkit浏览器上运行。因此,我需要一种方法将所有xsl:import合并到主文件中。因此,我可以看看这是否解决了问题。我已经阅读了其他线程上提供的解决方案,例如:

我可以看出,提供的解决方案在服务器端使用了以下样式表脚本:

<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                version="1.0">

 <xsl:template match="xsl:include">
<xsl:apply-templates select="document(@href)/xsl:stylesheet/*"/>
 </xsl:template>

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>


但是,我不知道如何使用它(除了用xsl:include替换xsl:import)。我是否将其放在template.xsl文件中,以及放在何处?我是否将它放在一个新的XSL文件中,并使用php脚本加载它,以便合并XSL文件。如果我能举个例子就好了。我需要的结果是为浏览器提供一个XSLT,而不包含/导入。我想要一个合并后可以保存的XSL文件,所以我去掉了其他文件。我不想在服务器端合并文件,除非我必须这样做。因此,如果有一个合并文件的工具。那也可以。谢谢。

我同意Michael的评论,即这个问题实际上太宽泛了,但我从您的问题中了解到的是,您希望样式表在浏览器上工作,而某些浏览器不允许
xsl:import
xsl:include

如果您没有XSLT开发环境,我强烈建议您自己创建一个XSLT开发环境,正如Michael已经说过的,很多XSLT开发环境都存在。这会帮你省去很多痛苦。建议包括:(在我看来,这是最好的),(只有XSLT1.0,但足以满足您的任务,因为浏览器只支持XSLT1.0)

但是,我不知道如何使用它(除了用xsl:include替换xsl:import)

您可以像使用任何XSLT一样使用它,但在本例中,需要合并的XSLT就是源代码,要使用上面显示的XSLT进行转换。只要用你的命令行运行它

是的,您可以替换该样式表中的
xsl:import
,但请注意,导入与包含不同。之后可能需要手动调整样式表,在原位插入这些样式表后会丢失

我是否将其放在template.xsl文件中,以及放在何处

我不明白这个问题。您说要用插入了导入和includes的XSLT替换原始XSLT,所以我猜您最了解这个答案,但我假设您希望在原始样式表上替换输出

我是否将它放在一个新的XSL文件中,并使用php脚本加载它,以便合并XSL文件

我不知道PHP是在哪里以及如何产生的。你说过要在浏览器中加载它。因此,在本地测试之后,转换的结果应该可以被浏览器访问

我想要一个合并后可以保存的XSL文件,所以我去掉了其他文件。我不想在服务器端合并文件,除非我必须这样做

是的,如上所述,只需运行您已经提供的样式表并保护输出

不希望在服务器端合并文件,除非必须合并。因此,如果有一个合并文件的工具

你已经给了自己一个工具。您可以像使用任何XSLT文件一样使用它,只需从命令行运行它(每个处理器的参数不同,但通常您可以使用
-?
或“-h”作为参数来查看它们,或者只查看处理器的文档)


所有这一切的底线是,在我看来,你似乎在试图实现一些东西,但你还不知道你试图实现的是什么。我的建议是尝试一下XSLT(当然不是在浏览器中!),一旦您理解了这些概念,就尝试一下您已经建议过的场景:对原始样式表运行合并样式表


当然,这是一个很大的麻烦,特别是考虑到
xsl:import
与只在该位置包含样式表的内容不同。您最好手动复制项目,使用XSLT编辑器显示是否出现错误、修复错误、保存错误、发布错误。

您只是在问“如何运行XSLT样式表服务器端?”有许多处理器可以这样做,可以使用命令行或GUI界面,也可以集成到IDE中,或者托管在web上。我很惊讶,任何人都应该在不经常使用这种工具的情况下进行XSLT开发,因为在浏览器中运行是可以想象的最痛苦的开发环境。我的主要问题是如何合并XSL文件。我想知道如何实现服务器端合并。没有人提供关于放置方式和位置的任何信息。您是希望在每次使用样式表时按需执行,还是希望在构建站点时执行一次?技术是什么:Java、.NET等?有很多方法可以做到这一点,而且都很简单,因此很难看出您的困难所在。我正在尝试将template.xsl中的所有include/imports合并到template.xsl中,以创建一个文件,该文件将呈现给webkit浏览器。我想完成这项任务一次。我只想要合并的文件。我想我不能理解的是如何完成合并。我需要任何工具或技术,将帮助我做到这一点,因为我不想这样做的手。我将在下面的帖子中解释更多内容。我试图实现的是将1.xsl、2.xsl、3.xsl、4.xsl合并到模板xsl(原始文件)中。我想要一个合并的文件。尽管如此,我不知道如何完成它。我一直在寻找解决方案,我发现了上面的合并样式表。让我重新表述我的问题。如何在my template.xsl上应用合并样式表?例如,有没有一个命令可以像下面这样执行。运行merge.xsl template.xsl