我本以为这对谷歌来说是一件容易的事,但我没有成功。

我想为一个变量分配一个属性的值(到目前为止很简单),然后使用该变量根据该属性的值选择另一个节点。

例子:

<xsl:variable name="myId" select="@id" />
<xsl value-of select="//Root/Some/Other/Path/Where[@id='{@myId}']/@Name />

那是行不通的。如果我用变量中的值替换 {@myId} ,那么它确实找到了正确的节点,但这样做不会产生任何结果。我确信我错过了一些东西,或者也许有不同的方法来做到这一点。

上下文是不同的顶级节点下有共享相同 id 值的相关数据,因此我需要在模板中获取相关节点。

有帮助吗?

解决方案

好吧,我终于想通了。确实是个愚蠢的问题,我只需要省略引号和大括号即可。有一次当我 想法 我已经尝试过了。: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}"/>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top