具有定义
<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
如何使第一个也返回属性的值?
谢谢!
答案 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
之类的东西。