2011-07-12 13 views
5

Jak zrobić kontynuować w XSLT for-each (nie opuszczającego for-each, ale raczej kontynuowaćfor-eachjak zrobić dalej w XSLT dla-każdego

odczuwalna:

<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> 
+0

+1 za wyraźne pytanie. –

Odpowiedz

0

Nie ma konstrukcji analogicznej do continue w XSL.Będziesz musiał zrestrukturyzować swój przepływ kodu, aby osiągnąć ten sam efekt.

Proponuję podzielić całe ciało pętli na mniejsze części, aby zminimalizować liczbę złożonych, jeśli jest.

Edit:

Oto jak to wygląda podczas korzystania z pełnych IFS złożonych:

<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> 

każdym razem trzeba continue trzeba owinąć całą następujący kod w straży.

Kod jest trudniejszy do odczytania jako pojedyncza instrukcja i jeśli w środku znajduje się znaczna ilość kodu, to dobrze zrobić, aby podzielić je na własne szablony i zadzwonić do nich.

+0

Nie sądzę, że jest to konieczne. Zobacz moją odpowiedź. –

1

Myślisz, że potrzebujesz xml: choose i xml: when. Element xsl:choose wybiera jeden spośród wielu możliwych rozwiązań alternatywnych. Więc kiedy wyrażenie jest ustawione na true, wykonuje ten blok, a następnie przechodzi do następnej pętli.

+0

Jeśli przykładowe wejście OP poprawnie odzwierciedla swój problem, 'xsl: choose' nie pomoże mu wcale. Zobacz moją odpowiedź. –

2

W tym konkretnym przypadku wydaje się, że chcesz wykonać oba kody zgodnie z warunkiem. W rzeczywistości chcesz kontynuować od pierwszego if tylko, jeśli $test1A jest prawdziwe.

W takim przypadku xsl:choose nie pomaga. Trzeba pracować z czystej logiki i emulować poszukiwanych zachowanie:

<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> 

warunki stosuje się jak wyżej, można wykonać drugie iftylko jeśli zagnieżdżona if w pierwszym oddziale jest fałszywe.