XSLT条件包括外部文件

Roy*_*ons 6 xml xslt

我想在XSLT中执行条件包含,但xsl:include是一个顶级元素.您只能使用xsl:if或xsl:在模板内部选择.是否有任何类型的黑客或工作允许条件包含外部文件?我试图使用document()函数,但它无法加载我的外部文件(可能是因为它不符合某些规则使其"有效").

我的外部xml文件是一堆xslt代码片段.根据主XSLT文件中变量的值,外部文件中的相应代码应该"复制/粘贴"到位(如C或PHP中的条件包含).

我的主XSLT文件的流程应按以下方式进行:

$configurationMode
if ( $configurationMode = Standard ) { xsl:include="standard.xml" } else { xsl:include="alt.xml" }
Run Code Online (Sandbox Code Playgroud)

显然我不能像上面那样简单地做到这一点,因此我问为什么会有黑客攻击或解决方法.

Dim*_*hev 6

这不能用XSLT 1.0完成,并且可以使用该use-when属性在XSLT 2.0中完成(在非常有限的范围内).

存在非xslt方法来实现所需的动态改变xsl:includexsl:import指令.

一种这样的方法是将XSLT样式表加载为XmlDocument,并使用可用的DOM方法来访问和修改属性,以将href属性设置为所需的值.然后从这个内存中修改的XMLDocument包含的XSLT样式表启动转换.


Kev*_*van 3

据我了解,当 xml 解析器解析和编译样式表时,会发生“包含”。这意味着在处理包含之前不会发生任何逻辑或表达式评估,因此无法使其成为条件。您需要使条件行为发生在样式表之外。

看看这个http://www.dpawson.co.uk/xsl/sect2/N4760.html#d6065e100

Mike Kay 的评论尤其有帮助:

这个问题已经被提出过很多次了。在之前的线程中,我们得出的结论是,用户试图编写通用样式表 G,然后通过有条件地包含专用样式表 A 或 B 来对其进行专门化。满足此要求的方法是让 A 和 B包括 G,而不是相反,然后在开始转换时有条件地选择 A 或 B 作为主要样式表。