首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xslt:<xsl:value-of select="MyPath/$MyVariable“失败

Xslt:<xsl:value-of select="MyPath/$MyVariable“失败
EN

Stack Overflow用户
提问于 2012-06-26 14:10:52
回答 3查看 840关注 0票数 0
代码语言:javascript
复制
<xsl:value-of select="$MyVar"/>

有效,但是

代码语言:javascript
复制
<xsl:value-of select="MyDataPfath/$MyVar"/>

不工作。

我的代码出了什么问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-26 16:05:33

从表面上看,你试图实现的是“动态评估”。默认情况下,XSLT不支持XPath的动态求值,因此需要使用扩展函数。

根据您的XSLT处理器,您可能需要查看EXSLT扩展。特别是http://www.exslt.org/dyn/index.html上的dynamic模块。这将允许做这样的事情

代码语言:javascript
复制
<xsl:value-of select="dyn:evaluate('MyDataPfath/$MyVar')"/> 

但是,在您的示例中,$MyVar可能只包含一个元素名称。在这种情况下,您可以将命令更改为以下命令,无需任何扩展函数即可工作

代码语言:javascript
复制
<xsl:value-of select="MyDataPfath/*[local-name() = $MyVar]"/>
票数 0
EN

Stack Overflow用户

发布于 2012-06-26 16:50:20

你的代码并没有失败,它完全按照规范所说的去做。这与您希望/想象的它可能会做的事情不同。

您的希望/想象力是基于对XPath中变量本质的根本误解。XPath变量不是宏。它们不是通过文本替换来工作的;它们表示值。如果变量$E包含字符串"X",则MyPath/$E的含义与MyPath/"X"相同,这在XPath 1.0中是非法的,而在XPath 2.0中,将返回与MyPath中的节点数量一样多的字符串"X“的实例。

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

票数 0
EN

Stack Overflow用户

发布于 2012-06-28 17:28:29

无法在中使用语法'MyDataPfath/$MyVar‘获取该值。它将无法识别正确的路径。假设$MyVar具有值'Hi‘。因此它将被表示为‘MyDataPfath/“Hi”,这不是您想要从XML检索的有效路径。要消除此限制,可以使用name()或local-name()函数,它们的用法如下所示:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11201617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档