<xsl:import>
和<xsl:include>
元素的行为似乎非常特定。我想做的事:
<xsl:import href="{$base}/themes/{/settings/active_theme}/styles.xsl" />
我想允许为我的应用程序加载不同的主题。我的应用程序中有一个设置,它将"当前活动主题"文件夹名称存储在xml节点中。不幸的是,上面的代码不起作用。有人知道实现我想做的事情的变通方法吗?
编辑:刚刚通过Twitter与一位XSLT专家确认。。。没有什么好办法做到这一点。在我的情况下,最简单的解决方案可能是分离前端和后端样式表,并将它们单独加载到XSLTProcessor。。。
如果您有三种样式表变体可在不同的环境中使用,由三个模块a.xsl、B.xsl和C.xsl表示,那么您不需要尝试将其中一个导入到包含所有公共代码的模块common.xsl中,而是需要颠倒结构:a.xsl和B.xsl中的每一个都应该导入common.xsl,或者在启动转换时将C.xsl作为主要样式表模块。
我想做的事:
<xsl:import href="{$base}/themes/{/settings/active_theme}/styles.xsl" />
这在XSLT的任何版本(1.0、2.0或3.0)中都是不允许的。
在XSLT2.0(及更高版本)中,可以使用use-when
属性,但可以指定的条件非常有限。
一个非XSLT解决方案是将导入的XSLT样式表加载为XmlDocument,并使用DOM API将href
属性设置为真正需要的值,然后才调用转换。