尝试选择节点时如何在 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" />

【讨论】:

仍有一段不应该出现的引文。这是一个非常小的编辑,所以如果不更改文本(最少字符限制),我就无法做到这一点。 谢谢,我认为现在是正确的。我最初也错过了结尾的双引号。 【参考方案2】:

您似乎对变量(只是 $variable)和属性值模板的使用感到困惑,这些模板允许您将任何 XPath 表达式放在某些属性中,例如

<newElement Id="@Id"/>

它们显然可以组合,因此您可以在属性值模板中包含一个变量,例如:

<newElement Id="$myId"/>

【讨论】:

以上是关于尝试选择节点时如何在 xsl 中使用变量?的主要内容,如果未能解决你的问题,请参考以下文章

XSL 转换提取最小和最大日期

XSLT document() 在 WebKit 浏览器中的使用

使用条件将 XSL 变量设置为节点集

XSL - 在变量中存储唯一和排序的数据

XSL xsl:template match =“/”

如何在 <xsl:if test="contains(string, searchedforstring)"> 中使用变量而不是字符串