尝试选择节点时如何在 xsl 中使用变量?
Posted
技术标签:
【中文标题】尝试选择节点时如何在 xsl 中使用变量?【英文标题】:How do you use a variable in xsl when trying to select a node? 【发布时间】:2010-09-05 13:03:35 【问题描述】:我原以为这对 Google 来说很容易,但我没有成功。
我想为一个变量分配一个属性的值(到目前为止很简单),然后使用该变量根据该属性的值选择另一个节点。
例子:
<xsl:variable name="myId" select="@id" />
<xsl value-of select="//Root/Some/Other/Path/Where[@id='@myId']/@Name />
那行不通。如果我将 @myId 替换为变量中的值,那么它确实找到了正确的节点,但以这种方式执行它不会产生任何结果。我确定我遗漏了一些东西,或者可能有其他方法可以做到这一点。
上下文是不同的***节点下有相关数据共享相同的id值,所以我需要在我的模板中获取相关节点。
【问题讨论】:
【参考方案1】:好吧,我终于想通了。真是愚蠢的问题,我只需要省略引号和大括号。我认为我已经尝试过的那些时候之一。 :D 哦,我在第一个示例中打错了@myId,代码实际上是 $myId。
<xsl:variable name="myId" select="@id" />
<xsl value-of select="//Root/Some/Other/Path/Where[@id=$myId]/@Name" />
【讨论】:
仍有一段不应该出现的引文。这是一个非常小的编辑,所以如果不更改文本(最少字符限制),我就无法做到这一点。您似乎对变量(只是 $variable)和属性值模板的使用感到困惑,这些模板允许您将任何 XPath 表达式放在某些属性中,例如
<newElement Id="@Id"/>
它们显然可以组合,因此您可以在属性值模板中包含一个变量,例如:
<newElement Id="$myId"/>
【讨论】:
以上是关于尝试选择节点时如何在 xsl 中使用变量?的主要内容,如果未能解决你的问题,请参考以下文章
XSLT document() 在 WebKit 浏览器中的使用
如何在 <xsl:if test="contains(string, searchedforstring)"> 中使用变量而不是字符串