как сделать продолжение в xslt для каждого - PullRequest
6 голосов
/ 12 июля 2011

Как сделать продолжить в xslt for-each (не выходя из for-each, а продолжить for-each?

Как:

<xsl:for-each select="asd">

    <xsl:if test="$test1">
        <!--some stuff-->
        <xsl:if test="$test1A">
            <!--CONTINUE()-->
        </xsl:if>
    </xsl:if>

    <xsl:if test="$test2">
        <!--some stuff-->
        <!--CONTINUE()-->
    </xsl:if>

    <!--main stuff-->
</xsl:for-each>

Ответы [ 3 ]

2 голосов
/ 12 июля 2011

В этом конкретном случае, кажется, вы хотите выполнить оба кода в соответствии с условием. Фактически вы хотите продолжить с первого if, только если $test1A истинно.

В этом случае xsl:choose вам не поможет. Вы должны работать с чистой логикой и эмулировать требуемое поведение:

<xsl:for-each select="asd">
    <xsl:if test="$test1">
        <!--some stuff-->
        <xsl:if test="$test1A">
            <!--CONTINUE()-->
        </xsl:if>
    </xsl:if>
    <xsl:if test="$test2 and not($test1A)">
        <!--some stuff-->
        <!--CONTINUE()-->
    </xsl:if>
    <!--main stuff-->
</xsl:for-each>

Используйте условия, как указано выше, вы будете выполнять вторую if , только если вложенная if в первой ветви ложна.

1 голос
/ 12 июля 2011

Думаю, вам нужен xml: выбор и xml: когда. xsl: выбирать элемент выбирает один среди ряда возможных альтернатив. Поэтому, когда выражение оценивается как true, оно выполняет этот блок и затем переходит к следующему циклу.

0 голосов
/ 12 июля 2011

В XSL нет конструкции, аналогичной continue. Вам придется реструктурировать поток кода для достижения того же эффекта.

Я бы предложил разбить все тело цикла на более мелкие куски, чтобы минимизировать количество составных if.

Edit:

Вот как это выглядит при использовании полного составного ifs:

<xsl:for-each select="asd">
    <xsl:if test="$test1">
        <!--some stuff (1)-->
    </xsl:if>
    <xsl:if test="not($test1 and $test1A)">
        <xsl:choose>
            <xsl:when test="$test2">
                <!--some stuff (2)-->            
            </xsl:when>
            <xsl:otherwise>
                <!--main stuff (3)-->    
            </xsl:otherwise>
        </xsl:choose>
    </xsl:if>
</xsl:for-each>

Каждый раз, когда вам нужен continue, вам нужно завернуть весь следующий код в охрану.

Код сложнее читать как одно утверждение, и если в нем содержится значительное количество кода, то вы бы хорошо разбили его на собственные шаблоны и вызвали их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...