合并多个xslt样式表

合并多个xslt样式表

Merge multiple xslt stylesheets

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

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

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


您可以使用XSL样式表来合并样式表。但是,这等效于使用xsl:include元素,而不是使用xsl:import(正如Azat Razetdinov指出的那样)。您可以在此处阅读其中的区别。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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>

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

我已经用Xalan测试了它,它似乎工作正常。


在不破坏导入优先级的情况下,不可能将导入的样式表包含到主文件中。例如,您在导入的样式表中定义顶级变量,然后在主文件中重新定义它。如果将两个文件合并为一个,则会获得两个具有相同名称的变量并导入优先级,这将导致错误。

解决方法是将xsl:import替换为xsl:include并解决所有冲突。之后,您可以放心地用相应文件的内容替换xsl:include指令,因为这就是XSLT处理器要做的事情:

The inclusion works at the XML tree level. The resource located by the href attribute value is parsed as an XML document, and the children of the xsl:stylesheet element in this document replace the xsl:include element in the including document. The fact that template rules or definitions are included does not affect the way they are processed.


手动合并可能是最好的选择。

主要考虑因素可能是确保匹配模板的逻辑在组合样式表中有效。


你为什么要通常出于某种原因(通常是可维护性)将它们分开

您总是可以自己编写合并-读入XSL文件,选择感兴趣的模板项,然后写入新的主XSL文件...


1
2
3
4
5
6
7
8
9
10
11
12
 import multiple xsl in single xsl

      <xsl:import href="FpML_FXOption_Trade_Template1.xsl"/>
      <xsl:apply-imports/>

<calypso:keyword>
                <calypso:name>DisplayOptionStyle</calypso:name>
<calypso:value>Vanilla</calypso:value>
</calypso:keyword>

           <xsl:import href="FpML_FXOption_Trade_Template2.xsl"/>
           <xsl:apply-imports/>


推荐阅读

    linux文件异或命令?

    linux文件异或命令?,数字,系统,工作,管理,命令,数据,网络,文件,第一,单位,基

    linux系统查版本命令?

    linux系统查版本命令?,系统,信息,名称,状态,设备,命令,软件,工具,版本,终端,l

    强大系统linux命令?

    强大系统linux命令?,系统,工作,地址,信息,命令,管理,名称,位置,目录,控制台,l

    linux文件复制的命令?

    linux文件复制的命令?,系统,文件,命令,目录,源文件,基本知识,位置,目标,选

    退出linux系统命令?

    退出linux系统命令?,系统,状态,工作,档案,命令,电脑,工具,基础,信息,时间,lin

    linux系统cmp命令?

    linux系统cmp命令?,系统,工作,标准,信息,命令,一致,目录,指令,功能,文件,请问

    linux系统刷新命令?

    linux系统刷新命令?,系统,工具,情况,最新,单位,工作,管理,信息,软件,服务,Lin

    linux系统sed命令?

    linux系统sed命令?,资料,系统,工作,跨行,代理,时间,简介,命令,文件,都会,Linu

    linux复制命令文件?

    linux复制命令文件?,系统,文件,命令,目录,基本知识,源文件,目标,文件夹,路

    linux下文件均分命令?

    linux下文件均分命令?,管理,情况,系统,工作,信息,地址,命令,目录,单位,设备,L

    linux系统维护命令?

    linux系统维护命令?,系统,工作,信息,策略,发展,网络,时间,情况,工具,服务,系

    linux查文件数量命令?

    linux查文件数量命令?,系统,数据,电脑,命令,文件,信息,代码,对比,软件,第三,l

    linux系统安装命令集?

    linux系统安装命令集?,系统,软件,工作,工具,在线,信息,数据,官方网站,基础,

    linux看系统用户命令?

    linux看系统用户命令?,系统,信息,密码,命令,服务,名称,网络,情况,软件,工具,L

    linux命令去重文件?

    linux命令去重文件?,系统,工作,命令,信息,数据,环境,代码,文件,目录,操作,Lin

    linux系统监听命令?

    linux系统监听命令?,网络,系统,工具,服务,数据,状态,名称,密码,短信,软件,lin

    linux匹配文件名命令?

    linux匹配文件名命令?,系统,时间,发行,位置,工具,软件,名称,盘后,电脑,盘中,l

    linux中重启系统命令?

    linux中重启系统命令?,系统,设备,工作,标准,命令,用户,电源,方式,首要,级别,L

    linux新建系统命令?

    linux新建系统命令?,系统,工作,地址,信息,命令,工具,目录,文件,时间,环境,Lin

    改文件名linux命令?

    改文件名linux命令?,名字,软件,文件,命令,位置,系统,文件名,目录,指令,方面,l