如何在 XSLT 中为不同的环境设置配置变量?

How can I set up configuration variables in XSLT for different environments?

我们有一个使用 XSLT 的网站。有一个 config.xslt 文件声明了一些全局变量,它包含在一堆其他样式表中。问题是我们在几个不同的地方托管网站,我们根据环境调整其中一些变量。

通常,我们会同时创建一个主配置文件和一个本地配置文件,以使本地更改不受版本控制。本地配置文件可以在不修改主配置文件的情况下覆盖它需要的任何变量。但是,据我了解,这在 XSLT 中是不可能的,因为 XSLT 变量只能声明一次,而且您无法检查它们是否已经声明。

那么我的问题是:是否可以在 XSLT 中实现这样的事情?

如果不是,管理我们的配置的更好方法是什么?

编辑: 感谢 Martin Honnen 的建议 xsl:import。我已经查找了如何使用 import 并且它可以满足我的要求。但是,它给我留下了另一个问题,即本地配置文件必须始终存在,否则整个应用程序就会中断。因为我想从版本控制中删除本地配置文件,所以它并不完全理想。我找到了 this 的答案,但它是针对 xslt-2.0 的,不幸的是我被 xslt-1.0 困住了。

我可以建议两个选项。

  1. 在进行转换之前,将您的配置作为参数添加到您的 XSL 转换器中。你如何做到这一点取决于你使用的是什么变压器。配置可以是 XML 或一组名称=值对。

  1. 使用 config.xml 文件填充 XSLT 顶部的 xsl:param。使用 document() 读取值。像这样:
<xsl:param name="config">
  <xsl:choose>
    <xsl:when test="document('C:\config\config.xml')">
      <xsl:value-of select="document('C:\config\config.xml)/config" />
    </xsl:when>
    <xsl:otherwise><config/></xsl:otherwise>
  </xsl:choose>
</xsl:param>

(如果您这样做,配置将始终至少为