2012-04-17 17 views
13

नीचे दिए गए दो कोडों के बीच क्या अंतर है? दोनों कोड की जाँच करता है एक विशेषता एक टैग या नहीं में मौजूद है या नहीं:एक्सएसएलटी विशेषताओं के बीच क्या अंतर है जब

<xsl:choose> 
    <xsl:when test="string-length(DBE:Attribute[@name='s0SelectedSite']/node()) &gt; 0"> 
    <table> 
     ... 
    </table> 
    </xsl:when> 
    <xsl:otherwise> 
    <table> 
     ... 
    </table> 
    </xsl:otherwise> 
</xsl:choose> 

और

<xsl:if test="@Col1-AllocValue"> 
    <xsl:copy-of select="@Col1-AllocValue"/> 
</xsl:if> 

उत्तर

2

choose अनेक शर्तों के लिए परीक्षण और केवल जब एक (या एक डिफ़ॉल्ट मामले) से मेल खाता है लागू करने के लिए अनुमति देता है। if के साथ आप भी परीक्षण कर सकते हैं, लेकिन उन्हें स्वतंत्र रूप से परीक्षण किया जाता है और प्रत्येक मिलान मामले में आउटपुट होगा।

जोड़ा जा रहा है और अधिक जानकारी के

choose आप एक से अधिक मामलों के लिए परीक्षण करने के लिए और केवल मामले में उत्पादन की स्थिति है कि मैच से एक, या कुछ डिफ़ॉल्ट उत्पादन उत्पन्न उत्पन्न की अनुमति देता है (खेद बंद भीड़ था)। उदाहरण के लिए:

<xsl:choose> 
    <xsl:when test='@foo=1'><!-- do something when @foo is 1--></xsl:when> 
    <xsl:when test='@foo=2'><!-- do something when @foo is 2--></xsl:when> 
    <xsl:when test='@foo=3'><!-- do something when @foo is 3--></xsl:when> 
    <xsl:otherwise><!-- this is the default case, when @foo is neither 1, 2 or 3--></xsl:otherwise> 
</xsl:choose> 

आप "शाखाओं" की एक देख सकते हैं @foo के मूल्य के आधार ले जाया जाएगा।

if साथ

, यह एक एकल परीक्षण है और कहा कि परीक्षण के परिणाम पर उत्पादन उत्पन्न:

<xsl:if test='@foo=1'><!-- do this if @foo is 1--></xsl:if> 
<xsl:if test='@foo=2'><!-- do this if @foo is 2--></xsl:if> 
<xsl:if test='@foo=3'><!-- do this if @foo is 3--></xsl:if> 

जटिलता यहाँ विफलता मामले है - क्या होता है जब @foo 1,2 या 3 है न? यह लापता मामला choose द्वारा अच्छी तरह से संभाला जाता है - यानी डिफ़ॉल्ट कार्रवाई करने की क्षमता है।

XSL भी "और" है कि आप सबसे अधिक अन्य भाषाओं में मिल जाए, कि आप एक वैकल्पिक कार्रवाई if परीक्षण असफल चाहिए प्रदान करने के लिए अनुमति देता है का अभाव है -, और एक एकल when के साथ एक choose और otherwise आप इस के आसपास पाने के लिए अनुमति देता है, लेकिन ऊपर मेरे उदाहरण में, कि (प्रदर्शित करने के लिए आप यह कर क्यों नहीं होता ..) भयानक होगा

<xsl:choose> 
    <xsl:when test='@foo=1'><!-- do something when @foo is 1--></xsl:when> 
    <xsl:otherwise> <!-- else --> 
    <xsl:choose> 
     <xsl:when test='@foo=2'><!-- do something when @foo is 2--></xsl:when> 
     <xsl:otherwise> <!-- else --> 
     <xsl:choose> 
      <xsl:when test='@foo=2'><!-- do something when @foo is 2--></xsl:when> 
      <xsl:otherwise><!-- this is the case, when @foo is neither 1, 2 or 3--></xsl:otherwise> 
     </xsl:choose> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:otherwise> 
</xsl:choose> 
+0

और स्पष्टीकरण की आवश्यकता है। –

12

चयन की संरचना

<xsl:choose> 
    <xsl:when test="a">A</xsl:when> 
    <xsl:when test="b">B</xsl:when> 
    <xsl:when test="c">C</xsl:when> 
    <xsl:when test="...">...</xsl:when> 
    <xsl:otherwise>Z</xsl:otherwise> 
</xsl:choose> 

जो multipl की अनुमति देता है e12sपर मूल्यांकन किए गए पहले परीक्षण के लिए ई चेक और एक ऑपरेशन किया जाना चाहिए। xsl:otherwise डिफ़ॉल्ट क्रियाएं करने के लिए है जब कोई भी चेक true पर मूल्यांकन करता है; विशेष रूप से यह एक if-then-else निर्माण (केवल एक xsl:when वैकल्पिक प्लस xsl:otherwise ब्लॉक) की सुविधा प्रदान करता है।

यह हमेशा मुझे चकित है कि xsl:if एक xsl:else विकल्प के लिए अनुमति नहीं दी है, लेकिन के रूप में इस xsl:choose निर्माण में उपलब्ध है, मुझे लगता है कि यह इसे जोड़ने के लिए नहीं आंका गया था। शायद अगले एक्सएसएलटी संस्करण में xsl:else शामिल होगा?

बाकी के लिए, xsl:when में परीक्षण और xsl:if में बिल्कुल वही कार्य करें: स्थिति की जांच करें।

नोट xsl:if की संरचना है कि बस

<xsl:if test="a">A</xsl:if> 

एक एकल

<xsl:when test="a">A</xsl:when> 

अमान्य होगा: xsl:when तत्व हमेशाxsl:choose का एक बच्चा है। और xsl:choose में बच्चे xsl:when और xsl:otherwise हो सकते हैं।

1

नीचे दिए गए दो कोडों के बीच क्या अंतर है? दोनों कोड चेकों एक विशेषता एक टैग में है या नहीं मौजूद है या नहीं:

यह सच नहीं है:

  1. पहले कोड टुकड़ा एक अगर ... व्यक्त करता है तो ... अन्य कार्रवाई, जबकि दूसरा खंड केवल व्यक्त करता है यदि ... कार्रवाई।

  2. प्रदत्त दो कोड खंडों में परीक्षण की गई स्थितियों - xsl:when निर्देश के भीतर और xsl:if निर्देशों के भीतर निर्देश अलग-अलग हैं। वास्तव में केवल xsl:if (दूसरे कोड खंड में) एक विशेषता के अस्तित्व के लिए परीक्षण।

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