尝试选择节点时如何在xsl中使用变量?

时间:2020-03-05 18:38:29  来源:igfitidea点击:

我本来以为这对Google来说很容易,但是我一直做不到。

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

例子:

<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}"/>