在条件基础上中断每个循环

问题描述 投票:0回答:1

我是xslt 2.0的新手,我只想在for-each循环中将值设置为一个变量一次(意味着如果设置了值,我想退出循环)。

目前,它为所有用户保持迭代。我只想在值设置好之后立即退出循环(紧接在我第一次尝试之后)。如果值设置一次,我不确定如何中断。

您能帮我解决下面的代码吗?

XSLT代码:

        <xsl:variable name="v_first_name">
            <xsl:for-each select="$emailList/emails/child::*">
                <xsl:variable name="mailid" select="id" />
                <xsl:for-each select="$userList/users/child::*">
                    <xsl:if test="emailid = $mailid">
                        <xsl:if test="firstname eq 'Antony'">

                            <xsl:value-of select="firstname" />

                        </xsl:if>

                    </xsl:if>
                </xsl:for-each>

            </xsl:for-each>

        </xsl:variable>



        <xsl:if test="$v_first_name != ''">

        <first_name>            
            <xsl:value-of select="$v_first_name" /> 
            </first_name>           
        </xsl:if>

XML O / p:

        <first_name>AntonyAntonyAntonyAntony</first_name>           

预期的XML O / P:

        <first_name>Antony</first_name>         

注1:请注意,我使用的是xslt 2.0,并且列表中可以有重复项(因此Antony可以出现两次,但是我只想出现一次(或唯一))。注意2:我也尝试了position(),但由于条件()可以在任何位置匹配,所以找不到它。

提前感谢。

for-loop xslt-2.0
1个回答
0
投票

从XPath开始,只需选择要查找的节点,而不是将for-each视为“循环”。如果您选择$userList/users/*[emailid = $emailList/emails/*/id]users中选择在emailid中具有匹配的$emailList/emails/*的子元素。

我不确定将硬编码一个名字值然后输出它具有什么意义,但是您当然可以选择例如$userList/users/*[emailid = $emailList/emails/*/id and firstname = 'Antony']/lastname。如果您要首先使用位置谓词,则可以给您一系列元素节点。取决于输入$userList/users/*[emailid = $emailList/emails/*/id and firstname = 'Antony'][1]/lastname或所有选定元素($userList/users/*[emailid = $emailList/emails/*/id and firstname = 'Antony']/lastname)[1]的结构。

© www.soinside.com 2019 - 2024. All rights reserved.