1
4

2 回答 2

1

您传递给substring-before()的只是一个字符串 ( '%RolesPath%')。您似乎正在尝试使用 Windows 环境变量。这不会按照您使用它的方式工作。

我认为你有两个选择:

选项1

xsl:param调用样式表时将环境变量的值作为 an 传递。这适用于 XSLT 1.0 或 2.0。

你需要xsl:param

<xsl:param name="RolesPath"/>

这就是您引用它的方式:

<a href="{concat('file:///', substring-before($RolesPath, 'roles'),'Flores.chm')}"/>

选项 2

使用该environment-variable()功能。这仅适用于 XSLT 3.0 处理器,例如 Saxon-PE 或 EE。

例子:

<a href="{concat('file:///', substring-before(environment-variable('RolesPath'), 'roles'),'Flores.chm')}"/>

environment-variable()这是显示该功能实际工作的另一个示例:

XSLT 3.0

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/">
        <environment-variable name="TEMP" value="{environment-variable('TEMP')}"/>
    </xsl:template>

</xsl:stylesheet>

输出(当应用于任何格式良好的 XML 时)

<environment-variable name="TEMP" value="C:\Users\dhaley\AppData\Local\Temp"/>
于 2013-03-15T18:30:46.770 回答
1

使用这个较短的表达式

<a href="file:///{substring-before($RolesPath, 'roles')}Flores.chm"/>

where$RolesPath作为外部全局参数传递给转换。

如何准确地将外部参数传递给转换因 XSLT 处理器而异——请阅读您的 XSLT 处理器文档。一些 XSLT 处理器还允许将字符串类型的参数从命令行执行实用程序传递给转换。

于 2013-03-16T05:03:23.930 回答