我有一个带有多个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进行了测试,看起来效果很好.