我有一个xslt样式表与多 xsl:imports我要将它们合并成一个xslt文件。

它是一个限制的系统,我们用它穿围绕xsl样式表作为一个字符串中存储的对象的存储器。这个被发送到远程机器进行改造。由于它不是被从装载盘href链被破坏,因此,我们需要除去的 xsl:import自的样式表。

是否有任何工具,它可以这样做?

有帮助吗?

解决方案

你可以使用一个XSL样式表来合并你的样式表。然而,这相当于使用xsl:include元素,不xsl:import(如阿扎特Razetdinov已经指出的)。你可以阅读的差异 在这里,.

因此,你应该第一个替代xsl:import的与xsl:包括,解决任何冲突和测试你是否仍获得正确的结果。在那之后,你可以用下面的样式表,以合并现有样式为一体。只是将其应用到你的主人的样式表:

<?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>

第一个模板,以替换所有xsl:include的样式包括通过使用文档功能,其内容在本文件中引用的href属性。第二个模板的 身份变换.

我测试过它与Xalan并且它似乎正常工作。

其他提示

这是不可能包括进口stylsheets入主要文件没有打破 导入优先顺序.例如,可以定义为一个顶级的变量,在进口的样式表和重新界定它的主要文件。如果你合并两个文件为一体,你会得到两个变量名称相同的和进口的优先顺序,这将导致错误。

解决方法是两个替代xsl:import的与xsl:include和解决任何 冲突.在那之后你是安全的替代xsl:包括说明与相应文件的内容,因为这是什么 XSLT processor不会:

列入工作在XML树的水平。资源位于href属性值分析为XML文件,以及儿童的xsl:样式表件在本文件取代xsl:include元素在包括文件。事实上,模板规则,或定义包括不影响他们的方式处理。

一种人工合并可能是最好的选择。

主要的考虑可能会来确保的逻辑模板匹配作品在结合的样式表。

为什么你想要?他们通常是分开的一个原因,毕竟(通常可维护性)

你总是可以写入合并你自己读XSL文件,选择的模板项目,你有兴趣,并写信给一个新的主XSL file...

 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/>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top