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
递归合并多个XSLT样式表_Xslt - Fatal编程技术网

递归合并多个XSLT样式表

递归合并多个XSLT样式表,xslt,Xslt,我希望将多个xslt样式表(V1.0)合并到一个样式表中 我已经在这里看到了一个类似的问题 文章中提供的答案确实有效,但只链接了导入的样式表的一个级别 下面是实现这一点的答案 <?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:temp

我希望将多个xslt样式表(V1.0)合并到一个样式表中

我已经在这里看到了一个类似的问题

文章中提供的答案确实有效,但只链接了导入的样式表的一个级别

下面是实现这一点的答案

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

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

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

我在导入的样式表上有一个级别的xsl:import引用,所以也需要重新诅咒导入的样式表,否则我只会得到下一个级别的xsl:import链接,这会破坏单个XSLT的对象

仅仅创建一个XSLT并不是一个选项,因为它们需要分开,以便更容易地管理内容版本控制


有人知道如何才能做到这一点吗?

你不能简单地替换一下吗

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


但是,您说要折叠
xsl:import
声明以及xsl:include。这样做会改变代码的语义


(事实上,在xsl:includes中进行合并也会产生一些小的副作用。这意味着包含模块中的模板会受到诸如主模块xsl:stylesheet元素中的exclude result前缀等属性的影响,并且会丢失包含模块中存在的任何此类属性。)

谢谢,这很有效。忽略xsl:import语句。我的意思是xsl:include。
<xsl:template match="xsl:include">
  <xsl:apply-templates select="document(@href)/xsl:stylesheet/*"/>
</xsl:template>