XSLT 1.0中xsl:for-each on xsl:key中迭代变量的名称
我有如下XSLT 1.0代码:XSLT 1.0中xsl:for-each on xsl:key中迭代变量的名称,xslt,xslkey,Xslt,Xslkey,我有如下XSLT 1.0代码: <xsl:key name="enemyItems" match="metadata[attributes/metadata_key/@value = 'enemylist']" use="attributes/metadata_refkey/@value"/> <xsl:template match="item"> <xsl:variable name="enemyList"
<xsl:key name="enemyItems"
match="metadata[attributes/metadata_key/@value = 'enemylist']"
use="attributes/metadata_refkey/@value"/>
<xsl:template match="item">
<xsl:variable name="enemyList"
select="key('enemyItems', @key)/attributes/@value"/>
<xsl:if test="string-length($enemyList) > 0">
<xsl:value-of select="@name"/>
</xsl:if>
</xsl:template>
我的问题是:什么会进入???部分(也就是说,迭代变量或事物的名称是什么?)
据我所知,钥匙可以存储
一个特定值的多个值
元素
否。一个键可以将一个值映射到多个节点
因此,这里:
<xsl:variable name="enemyList"
select="key('enemyItems', @key)/attributes/@value"/>
<xsl:if test="string-length($enemyList) > 0">
<xsl:value-of select="@name"/>
</xsl:if>
现在,在每个的内部,上下文节点是每个带有键映射的节点。因此,您可以定义$enemyList
如下:
<xsl:variable name="enemyList" select="attributes/@value"/>
它是上下文节点的dename
属性。。。(带键的一个wich映射)在xsl中:对于每个标记,每次迭代的上下文都是被检查的节点。因此,您问题中的?
应替换为
是,但如何获取$enemyList节点集中的其他节点(第一个节点除外)?这就是我要问的。@Paul Rainers:那你想用它们做什么?你的问题不清楚。您想测试每个节点的字符串值的字符串长度是否大于cero,然后输出上下文节点的name
属性?或者什么都不输出,作为我的答案。这解释了为什么现在的@name
(每个内部)与以前的意思不同(每个外部)
<xsl:template match="item">
<xsl:for-each select="key('enemyItems', @key)">
<xsl:variable name="enemyList"
select="???/attributes/@value"/>
<xsl:if test="string-length($enemyList) > 0">
<xsl:value-of select="@name"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:variable name="enemyList" select="attributes/@value"/>
<xsl:value-of select="@name"/>