我想在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)
显然我不能像上面那样简单地做到这一点,因此我问为什么会有黑客攻击或解决方法.
据我了解,当 xml 解析器解析和编译样式表时,会发生“包含”。这意味着在处理包含之前不会发生任何逻辑或表达式评估,因此无法使其成为条件。您需要使条件行为发生在样式表之外。
看看这个http://www.dpawson.co.uk/xsl/sect2/N4760.html#d6065e100
Mike Kay 的评论尤其有帮助:
这个问题已经被提出过很多次了。在之前的线程中,我们得出的结论是,用户试图编写通用样式表 G,然后通过有条件地包含专用样式表 A 或 B 来对其进行专门化。满足此要求的方法是让 A 和 B包括 G,而不是相反,然后在开始转换时有条件地选择 A 或 B 作为主要样式表。