间接变量/参数引用(另一个属性/另一个变量中的名称)

2024-05-06

是否可以使用 XSL 访问名称存储在另一个变量(或参数)中的变量(或参数)?如果没有,为什么?

我是 xsl 的新手,来自其他语言,可以使用此功能,例如 bash、ant。也许我在寻找这个问题的答案时就错了。但既然我在SO上没有找到它,我想应该有一个。

两个例子。我有参数p1, p2, p3。然后我有一个参数pname其值为字符串p2。我想阅读的价值p2 using pname, 就像是$$pname or ${$pname}。或者以更复杂的方式。如果pnumber等于2,那么我想读取带有名称的参数的值concat('p', $pnumber),我会编码为
param-value(concat('p', $pnumber)).


当 XSLT 样式表将自身作为常规 XML 文档访问时,这是可能的:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:param name="p1" select="'P1-Value'"/>
 <xsl:param name="p2" select="'P2-Value'"/>
 <xsl:param name="p3" select="'P3-Value'"/>

 <xsl:param name="pName" select="'p3'"/>
 <xsl:param name="pNumber" select="2"/>

 <xsl:variable name="vDoc" select="document('')"/>

 <xsl:template match="/">
     <xsl:value-of select=
     "concat('Param with name ',
             $pName,
             ' has value: ',
             $vDoc/*/xsl:param[@name = $pName]/@select
             )"/>
   <xsl:text>&#xA;</xsl:text>   

   <xsl:variable name="vParam" select=
      "$vDoc/*/xsl:param[@name = concat('p', $pNumber)]"/>

     <xsl:value-of select=
     "concat('Param with name p',
             $pNumber,
             ' has value: ',
             $vParam/@select
             )"/>

 </xsl:template>
</xsl:stylesheet>

产生想要的结果:

Param with name p3 has value: 'P3-Value'
Param with name p2 has value: 'P2-Value'

解释:

表达方式document('')选择当前 XSLT 样式表的文档节点。

一个限制是当前的 XSLT 样式表必须具有(可通过)URI(例如驻留在给定文件中并可通过其文件名访问)——如果样式表是动态生成的,则上述代码不会产生正确的结果(内存中的字符串)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

间接变量/参数引用(另一个属性/另一个变量中的名称) 的相关文章

随机推荐