在中选择的值(XSLT)

在中选择的值(XSLT),xslt,Xslt,我试着与你建立联系 <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="concat('file:///', substring-before('%RolesPath%', 'roles'),'Flores.chm')"/> </xsl:attribute> Help </xsl:element> 但我得到了一个错误: 文

我试着与你建立联系

<xsl:element name="a">
  <xsl:attribute name="href">
    <xsl:value-of select="concat('file:///', substring-before('%RolesPath%', 'roles'),'Flores.chm')"/>
  </xsl:attribute>
  Help
</xsl:element>
但我得到了一个错误:

文件file:///Flores.chm 找不到

我很确定,变量%RolesPath%可以正常工作。我通常在代码中使用它。如果我只在代码中使用

<xsl:value-of select="concat('file:///', substring-before('%RolesPath%', 'roles'),'Flores.chm')"/>
我明白了

file:///C:\Flores\Flores.chm

这是一条正确的道路。请问我在哪里做错了

编辑%%RolePath%存储用于指定使用此代码的程序文件夹的路径。在我的例子中%RolesPath%存储C:\Flores\roles\

来说明我的问题。我需要打开程序根文件夹中的fileFlores.chm。程序可以安装在PC中的任何地方,并且是唯一可行的方法,我可以通过%RolePath%获得路径。

之前传递给子字符串的只是字符串“%RolePath%”。您似乎正在尝试使用Windows环境变量。这不会像你使用它的方式那样起作用

我认为你有两个选择:

选择1

调用样式表时,将环境变量的值作为xsl:param传递。这可以在XSLT1.0或2.0中使用

您需要xsl:param:

下面是环境变量的另一个示例,显示函数实际工作:

XSLT3.0

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

<environment-variable name="TEMP" value="C:\Users\dhaley\AppData\Local\Temp"/>
使用以下较短的表达式:

其中,$RolesPath作为外部全局参数传递给转换


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

什么是%RolePath%?你是在用它作为占位符,而不是实际的占位符吗?如果是这样的话,你能告诉我们实际的情况吗,因为问题可能就在这里。@JLRishe我用更详细的信息编辑了我以前的文章。我在XSLT 1.0中工作,而你的选项1不起作用。%RolePath%不是Windows变量,它是我工作的程序中的应用程序变量。@Sk1X1-然后您需要将%RolePath作为xsl:param传递给样式表。XSLT处理器不知道%RolePath%是什么。这不起作用。还是一样的错误。看起来程序变量%RolePath%在ATRIC中不起作用,但是@Sk1X1,我的答案中没有%RolePath%。也许你想对其他答案发表评论?评论是对的。这更像是规范,为什么我的代码不起作用。如果我使用了你的代码,我就不能使用$RolesPath,因为变量$RolesPath不存在。我必须使用%RolePath%而不是$RolePath。@Sk1X1,我在这个答案中清楚地说,您必须在外部传递$RolePath参数的值。您需要阅读XSLT处理器的文档,了解如何将外部参数传递给转换。
<a href="{concat('file:///', substring-before($RolesPath, 'roles'),'Flores.chm')}"/>
<a href="{concat('file:///', substring-before(environment-variable('RolesPath'), 'roles'),'Flores.chm')}"/>
<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>
<environment-variable name="TEMP" value="C:\Users\dhaley\AppData\Local\Temp"/>
<a href="file:///{substring-before($RolesPath, 'roles')}Flores.chm"/>