合并多个xslt样式表

roo*_*roo 7 xslt

我有一个带有多个xsl:imports 的xslt样式表,我想将它们全部合并到一个xslt文件中.

它是我们正在使用的系统的限制,它作为存储在内存中的字符串对象传递到xsl样式表.这将传输到执行转换的远程计算机.由于它没有从磁盘加载,因此href链接被破坏,因此我们需要xsl:import从样式表中删除s.

有没有可以做到这一点的工具?

Chr*_*erg 16

您可以使用XSL样式表来合并样式表.但是,这相当于使用xsl:include元素,而不是xsl:import(正如Azat Razetdinov已经指出的那样).你可以在这里阅读不同之.

因此,您应该首先用xsl:include替换xsl:import's,解决所有冲突并测试您是否仍然得到正确的结果.之后,您可以使用以下样式表将现有样式表合并为一个样式表.只需将其应用于主样式表:

<?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:stylesheet>
Run Code Online (Sandbox Code Playgroud)

第一个模板使用document函数替换所有xsl:include和包含的样式表,该函数读入href属性中引用的文件.第二个模板是身份转换.

我用Xalan进行了测试,看起来效果很好.