2 に答える
渡すのsubstring-before()
は単なる文字列 ( '%RolesPath%'
) です。Windows 環境変数を使用しようとしているようです。これは、あなたが使用している方法では機能しません。
2つのオプションがあると思います:
オプション1
xsl:param
スタイルシートを呼び出すときに、環境変数の値を として渡します。これは、XSLT 1.0 または 2.0 で機能します。
次のものが必要ですxsl:param
。
<xsl:param name="RolesPath"/>
そして、これはあなたがそれを参照する方法です:
<a href="{concat('file:///', substring-before($RolesPath, 'roles'),'Flores.chm')}"/>
オプション 2
機能を使用してくださいenvironment-variable()
。これは、Saxon-PE や EE などの XSLT 3.0 プロセッサでのみ機能します。
例:
<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"/>
次の短い表現を使用します。
<a href="file:///{substring-before($RolesPath, 'roles')}Flores.chm"/>
where$RolesPath
は、外部のグローバル パラメータとして変換に渡されます。
外部パラメータを変換に渡す正確な方法は、XSLT プロセッサによって異なります。XSLT プロセッサのドキュメントを参照してください。一部の XSLT プロセッサでは、文字列型のパラメーターをコマンド ライン実行ユーティリティから変換に渡すこともできます。