题
我有一个xslt样式表与多 xsl:import
s我要将它们合并成一个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/>