Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT 1.0中xsl:for-each on xsl:key中迭代变量的名称_Xslt_Xslkey - Fatal编程技术网

XSLT 1.0中xsl:for-each on xsl:key中迭代变量的名称

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"

我有如下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"
                  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"/> 

它是上下文节点的de
name
属性。。。(带键的一个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"/>