在XSL中将属性值匹配到键

时间:2014-12-30 21:34:23

标签: xslt

我在我的XSL文件中定义了一个键,在其中传入一个等于node" d"的值的字符串。返回父节点" c":

<xsl:key name="column" match="/a/b/c" use="d"/>

每个节点&#34; c&#34;具有唯一的@position属性。

我需要使用key函数来匹配另一个节点的@position属性,&#34; x&#34;,其中@position值将匹配&#34;中的@position属性的值。 C&#34;节点,如:

<xsl:value-of select="/a/x[@position='##']/y/z"/>

我想将属性匹配语句中的##替换为:

<xsl:value-of select="key('column','foo')/@position"/>

我试图在花括号中使用表达式简写,例如:

<xsl:value-of select="/a/x[@position={key('column','foo')/@position}]/y/z"/>

但这不起作用。我可以定义一个等于键值的变量:

<xsl:variable name="var1" select="key('column','foo')/@position"/>

并在属性相等语句中使用该变量:

<xsl:value-of select="/a/x[@position=$var1]/y/z"/>

但这会产生不必要的额外步骤。

1 个答案:

答案 0 :(得分:1)

不要在select属性表达式中使用花括号:

<xsl:value-of select="/a/x[@position=key('column','foo')/@position]/y/z"/>

显然,要求输入密钥match="a/x" use="@position"并简单地

<xsl:value-of select="key('k2', key('column','foo')/@position)/y/z"/>