每个循环的XSL选择第一次出现的位置

时间:2011-09-28 07:55:08

标签: xslt

在下面的代码片段中,我试图从可用字段中获取EMP_ID字段的位置。如果只出现一次EMP_ID,这样可以正常工作。

但是如果有多个出现,那么变量'empid_field'将具有一个接一个地附加的所有出现的位置。即如果EMP_ID位于位置1,8和11,则'empid_field'将为'1811'。

我有没有办法只获得第一次出现的位置?或者我可以至少得到逗号分隔的位置? (代码示例将受到高度赞赏,因为我是XSL编程的新手)

<xsl:variable name="empid_field">
    <xsl:for-each select="$fields">
        <xsl:if test="internalName='EMP_ID'">
            <xsl:value-of select="position()"/>
        </xsl:if>
    </xsl:for-each>
</xsl:variable>

2 个答案:

答案 0 :(得分:0)

我认为最简单的解决方案就是扩展它。但我认为还有一些看起来更漂亮的解决方案。

<xsl:variable name="empid_field">
    <xsl:for-each select="$fields">
        <xsl:if test="internalName='EMP_ID'">
            <xsl:value-of select="position()"/>
        </xsl:if>
    </xsl:for-each>
</xsl:variable>

<xsl:variable name="first_empid_field">
    <xsl:value-of select="$empid_field[1]"/>
</xsl:variable>

变量$first_empid_field只有第一个位置值。

答案 1 :(得分:0)

好的有点......

创建逗号分隔的字符串并在分隔符之前选取部分。

<xsl:variable name="empid_fields" >
    <xsl:for-each select="$fields">
        <xsl:if test="internalName='EMP_ID'">
            <xsl:value-of select="position()" />
            <xsl:text >, </xsl:text>
        </xsl:if>
    </xsl:for-each>
    </xsl:variable>

    <xsl:variable name="empid_field" >
        <xsl:value-of select="substring-before($empid_fields, ', ')" />
    </xsl:variable>