在XSLT import / include中使用动态href?

时间:2012-03-25 15:27:51

标签: xml xslt import include

<xsl:import><xsl:include>元素似乎表现得非常具体。 我想做什么:

<xsl:import href="{$base}/themes/{/settings/active_theme}/styles.xsl" />

我想允许为我的应用程序加载不同的主题。我的应用程序中有一个设置,它将“当前活动主题”文件夹名称存储在xml节点中。 不幸的是,上面的代码不起作用。 有没有人知道一个解决方法来实现我想做的事情?

编辑: 刚刚通过推特确认了XSLT大师......没有办法做到这一点。在我的案例中最简单的解决方案可能是分离前端和后端样式表并将它们单独加载到XSLTProcessor ......

2 个答案:

答案 0 :(得分:1)

  

我想做什么:

<xsl:import href="{$base}/themes/{/settings/active_theme}/styles.xsl" />

XSLT的任何版本(1.0,2.0或3.0)都不允许这样做。

在XSLT 2.0(及更高版本)中,可以使用use-when属性,但可能指定的条件非常有限。

一个非XSLT解决方案是将导入的XSLT样式表加载为XmlDocument,并使用DOM API将href属性设置为真正需要的值 - 然后才调用转换。

答案 1 :(得分:1)

xsl:import在执行之前组装样式表。样式表在执行时无法自行修改,这正是您要实现的目标。

如果您有三种样式表变体用于不同的情况,由三个模块A.xsl,B.xsl和C.xsl表示,那么不要尝试将其中一个导入到模块common.xsl中包含所有常用代码,您需要反转结构:A.xsl,B.xsl和C.xsl中的每一个都应该导入common.xsl,您应该选择A.xsl,B.xsl或C.xsl作为启动转换时的主要样式表模块。