XSLT:

时间:2012-06-26 06:10:52

标签: xslt value-of

<xsl:value-of select="$MyVar"/>

有效但

<xsl:value-of select="MyDataPfath/$MyVar"/>

不起作用。

我的代码有什么问题?

3 个答案:

答案 0 :(得分:0)

从它的角度来看,你想要实现的是“动态评估”。默认情况下,XSLT不支持动态评估XPath,因此您需要使用扩展函数。

您可能希望查看EXSLT扩展,具体取决于您的XSLT处理器。特别是http://www.exslt.org/dyn/index.html处的动态模块。这将允许做这样的事情

<xsl:value-of select="dyn:evaluate('MyDataPfath/$MyVar')"/> 

但是,在您的情况下,也许$ MyVar只包含一个元素名称。在这种情况下,您可以将命令更改为以下命令,这将在没有任何扩展函数的情况下工作

<xsl:value-of select="MyDataPfath/*[local-name() = $MyVar]"/>

答案 1 :(得分:0)

您的代码没有失败,它完全符合规范所说的应该做的事情。这与你希望/想象它可能做的不同。

您的希望/想象力基于对XPath中变量性质的基本误解。 XPath变量不是宏。他们不通过文字替代来工作;他们代表价值观。如果变量$ E包含字符串“X”,则MyPath/$E表示与MyPath/"X"相同,这在XPath 1.0中是非法的,并且在XPath 2.0中返回字符串“X”的尽可能多的实例MyPath中有节点。

您可能打算MyPath/*[name()=$E]

答案 2 :(得分:0)

通过使用语法'MyDataPfath / $ MyVar'来获取值是不可能的。它无法识别正确的路径。 假设$ MyVar的值为'Hi'。因此它将表示为'MyDataPfath /“Hi”',这不是您想要从XML检索的有效路径。 要删除此限制,您可以使用name()或local-name()函数,可以按如下方式使用:   或