跳过xsl:for-each迭代时,xsl:number递增

弗拉德

我有XML消息:

<DataList>
    <Datainfo>                  
        <Name>Doc_image.jpg</Name>              
        <Type>Image</Type>                                      
    </Datainfo>

    <Datainfo>                  
        <Name>Spec_text1.txt</Name>             
        <Type>Document</Type>                                           
    </Datainfo>

    <Datainfo>                  
        <Name>Spec_text2.txt</Name>             
        <Type>Document</Type>                                           
    </Datainfo>
</DataList>

应该将其转换为具有两个要求的另一个XML:

  • 仅那些Type ='Document'的<Datainfo>
  • 总共不超过5个方块。(为此,我使用xsl:number作为计数器)

我的XSL是:

<xsl:template match="//*:DataList">
<xsl:for-each select="./*:Datainfo[./*:Type = 'Document']">
    <xsl:variable name="num">
        <xsl:number/>
    </xsl:variable>

    <xsl:if test="$num &lt;= 5">
        <xsl:element name="Name{$num}">
            <xsl:value-of select="./*:Name"/>
        </xsl:element>
    </xsl:if>
</xsl:for-each>
</xsl:template>

带有类型图像的第一个块被跳过,但是计数器仍然考虑该迭代并以递增方式递增!现在我明白了:

<Name2>Spec_text1.txt</Name2>
<Name3>Spec_text2.txt</Name3>

预期结果是:

<Name1>Spec_text1.txt</Name1>
<Name2>Spec_text2.txt</Name2>

我被困在这里,因为据我了解,我无法创建自己的计数器,也无法在需要时递增或递减它,就像在Java中一样。任何帮助表示赞赏。

马丁·洪恩

只需使用<xsl:for-each select="./*:Datainfo[./*:Type = 'Document'][position() le 5]"><xsl:element name="Name{position()}">

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章