<xsl:value-of select="$MyVar"/>
有效但
<xsl:value-of select="MyDataPfath/$MyVar"/>
不起作用。
我的代码有什么问题?
答案 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()函数,可以按如下方式使用: 或