2011-07-12 9 views
5

कैसे एक एक xslt for-each (for-each बाहर निकलने नहीं में जारी रखने के लिए क्या करना है, बल्कि जारी रखने केfor-eachएक एक xslt में जारी है करने के लिए कैसे के लिए-प्रत्येक

तरह:

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

उत्तर

0

एक्सएसएल में continue के समान कोई रचना नहीं है। आपको उसी प्रभाव को प्राप्त करने के लिए अपने कोड प्रवाह को पुन: व्यवस्थित करना होगा।

यदि मैं यौगिक की संख्या को कम करने के लिए लूप बॉडी की पूरी तरह से छोटे टुकड़ों को तोड़ने का सुझाव दूंगा।

संपादित करें:

यहाँ यह है जब आप पूर्ण यौगिक आईएफएस का उपयोग की तरह लग रहा है:

<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 आप एक गार्ड के सभी निम्नलिखित कोड रैप करने के लिए की जरूरत है।

कोड एक कथन के रूप में पढ़ने के लिए कठिन है और यदि उनके अंदर कोई पर्याप्त मात्रा में कोड है तो क्या आप उन्हें अपने टेम्पलेट में तोड़ने और उन्हें कॉल करने के लिए अच्छा प्रदर्शन करेंगे।

+0

मुझे नहीं लगता कि यह आवश्यक है। मेरा जवाब देखें –

1

सोचें कि आपको xml की आवश्यकता है: चुनें और xml: कब। xsl:choose तत्व कई संभावित विकल्पों के बीच एक का चयन करता है। तो जब अभिव्यक्ति का मूल्यांकन सही होता है, तो वह उस ब्लॉक को निष्पादित करता है और फिर अगले लूप पर जाता है।

+0

यदि ओपी का नमूना इनपुट सही ढंग से अपनी समस्या को प्रतिबिंबित करता है, तो 'xsl: select' उसे बिल्कुल मदद नहीं करेगा। मेरा जवाब देखें –

2

इस विशिष्ट मामले में, ऐसा लगता है कि आप संभवतः दोनों शर्तों को एक शर्त के अनुसार निष्पादित करना चाहते हैं। वास्तव में आप पहले 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 पहली शाखा में गलत है निष्पादित करेंगे। स्पष्ट प्रश्न के लिए

संबंधित मुद्दे