有没有办法在XSL中执行动态,错误安全的XSL包含/导入?

时间:2011-06-03 19:22:51

标签: xslt

我想要一个满足2个要求的xsl:include / import

  1. 错误安全:,例如如果模板不存在,则不执行任何操作
  2. 动态,例如包含的XSL的值是XML
  3. 中的值

    e.g。

    <xsl:import href="<xsl:value-of select='/root/@additionalFormattingXSL' />.xsl"/>
    

    有没有办法获得上述部分或全部要求? (在任何现有的XSLT版本中都不允许Java)?

2 个答案:

答案 0 :(得分:2)

如果你说出你想要达到的目标,那么帮助你会更容易:然后我们可以判断你希望实现它的方式是否完全是一种全能的。

请记住,xsl:import是一种从各种模块构建程序的机制,并且在大多数编程语言中,XSLT程序在开始执行之前构造和编译。所以你肯定无法通过将xsl:import视为某种可执行指令来动态地修改自己的样式表。但是,您可以编写一个样式表,其效果是创建或修改另一个 XSLT样式表,而这通常是有意义的。

答案 1 :(得分:1)

一种方法是使用额外的XSL样式表自己执行输入。此导入处理样式表将原始样式表作为输入,并输出包含原始样式表和所有成功导入的样式表的扩展样式表。

这样,您就可以完全控制需求1和2.关于需求1,您可以在导入处理样式表中使用doc-available()

仅供参考,通常将动态值合并到属性值的方法是使用Attribute Value Template,例如

href="{/root/@additionalFormattingXSL}.xsl"

但是,这仅适用于指定为AVT的属性,例如文字结果元素的属性。我非常确定href的{​​{1}}属性