Разрыв для каждого цикла на условной основе - PullRequest
0 голосов
/ 30 октября 2019

Я новичок в 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, и в моих списках могут быть дубликаты (поэтому Антоний может прийти дважды, но я хочу только один раз (или уникальный)). Примечание 2: Я также пытался с помощью position (), но не смог найти его работоспособным, поскольку условие () может совпадать в любой позиции.

Заранее спасибо.

1 Ответ

0 голосов
/ 30 октября 2019

Начните с 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].

...