xPath表达式中变量的用法

时间:2019-05-15 05:51:26

标签: xpath type-conversion xslt-2.0

具有定义

<xsl:variable name="testVariable">
    <xsl:value-of select="'/author/'"/> 
</xsl:variable>

我希望如此

<xsl:value-of select="concat('./book',$testVariable,'@attribute')" />

返回相同的结果

<xsl:value-of select="./book/author/@attribute" />

但是只有后者返回属性的实际值,第一个仅返回路径

./book/author/@attribute

如何使第一个也返回属性的值?

谢谢!

1 个答案:

答案 0 :(得分:0)

concat()函数返回一个字符串,它不会神奇地将该字符串解释为XPath表达式的源代码,然后对该表达式求值。

请注意

<xsl:variable name="testVariable">
    <xsl:value-of select="'/author/'"/> 
</xsl:variable>

在99%的情况下可以重写为

<xsl:variable name="testVariable" select="'/author/'"/>

不仅代码更少,而且效率更高。 (可悲的是,其余1%的情况意味着优化器无法自动重写此代码。)

通常,您可以使用自己想要的东西

select="/book/*[name()=$testVariable]/@attribute"

有时候,您需要做些其他事情,在这种情况下,您需要在XSLT 3.0中使用xsl:evaluate之类的东西。