递归合并多个XSLT样式表
问题描述:
我期待将多个xslt样式表(V1.0)合并到一个样式表中。递归合并多个XSLT样式表
我已经看过发布在这里的类似问题。
Merge multiple xslt stylesheets
设在后答案的工作,但仅进口环节样式表中的一个级别。
下面是提供的答案,这是实现这一目的。
<?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:进口参考下一层的进口样式因此需要过于重新诅咒进口样式表,否则,我只是得到了xsl:为下一级的进口环节这击败了单个XSLT的对象。
刚开始创建单个XSLT不是一种选择,因为它们需要分开来管理内容版本控制。
有没有人可以做到这一点?
答
你不能简单地用
<xsl:template match="xsl:include">
<xsl:apply-templates select="document(@href)/xsl:stylesheet/*"/>
</xsl:template>
但是更换
<xsl:template match="xsl:include">
<xsl:copy-of select="document(@href)/xsl:stylesheet/*"/>
</xsl:template>
,你说你要折叠的xsl:import
声明以及XSL:包括。这样做会改变你的代码的语义。 (事实上,在xsl:includes中的合并也可能有一些小的副作用,这意味着包含模块中的模板会受xsl:stylesheet中排除结果前缀等属性的影响主要模块的元素,并且失去所包含模块中存在的任何此类属性。)
+1好答案。 – 2011-05-03 17:32:24
谢谢,这工作。忽略xsl:import语句。我打算说xsl:include。 – Doomster 2011-05-04 07:01:57