XSLT में if-else स्टेटमेंट को कैसे लागू करें?


171

मैं XSLT में एक ifelse स्टेटमेंट लागू करने की कोशिश कर रहा हूं, लेकिन मेरा कोड सिर्फ पार्स नहीं करता है। क्या किसी के पास कोई विचार है?

  <xsl:variable name="CreatedDate" select="@createDate"/>
  <xsl:variable name="IDAppendedDate" select="2012-01-01" />
  <b>date: <xsl:value-of select="$CreatedDate"/></b> 

  <xsl:if test="$CreatedDate > $IDAppendedDate">
    <h2> mooooooooooooo </h2>
  </xsl:if>
  <xsl:else>
    <h2> dooooooooooooo </h2>
  </xsl:else>

जवाबों:


316

आपको <xsl:choose>टैग का उपयोग करके इसे फिर से लागू करना होगा :

       <xsl:choose>
         <xsl:when test="$CreatedDate > $IDAppendedDate">
           <h2> mooooooooooooo </h2>
         </xsl:when>
         <xsl:otherwise>
          <h2> dooooooooooooo </h2>
         </xsl:otherwise>
       </xsl:choose>

65

यदि कथन का उपयोग केवल एक स्थिति को जल्दी से जांचने के लिए किया जाता है। जब आपके पास कई विकल्प हों, तो <xsl:choose>नीचे दिए गए उदाहरण के रूप में उपयोग करें:

   <xsl:choose>
     <xsl:when test="$CreatedDate > $IDAppendedDate">
       <h2>mooooooooooooo</h2>
     </xsl:when>
     <xsl:otherwise>
      <h2>dooooooooooooo</h2>
     </xsl:otherwise>
   </xsl:choose>

इसके अलावा, आप नीचे दिए गए उदाहरण के रूप में <xsl:when>व्यक्त If .. Else Ifया Switchपैटर्न के लिए कई टैग का उपयोग कर सकते हैं :

   <xsl:choose>
     <xsl:when test="$CreatedDate > $IDAppendedDate">
       <h2>mooooooooooooo</h2>
     </xsl:when>
     <xsl:when test="$CreatedDate = $IDAppendedDate">
       <h2>booooooooooooo</h2>
     </xsl:when>
     <xsl:otherwise>
      <h2>dooooooooooooo</h2>
     </xsl:otherwise>
   </xsl:choose>

पिछला उदाहरण नीचे दिए गए छद्म कोड के बराबर होगा:

   if ($CreatedDate > $IDAppendedDate)
   {
       output: <h2>mooooooooooooo</h2>
   }
   else if ($CreatedDate = $IDAppendedDate)
   {
       output: <h2>booooooooooooo</h2>
   }
   else
   {
       output: <h2>dooooooooooooo</h2>
   }

1
क्या आप नीचे दिए गए कथन को सही कर सकते हैं, हम सभी जानते हैं कि अगर (मामला> x) बिना {} का पालन किए केवल 1 निम्नलिखित पंक्ति को पूरा करेगा, तो मैंने कई शुरुआती लोगों पर यह देखा है कि वे वही लिखते हैं जो आपने यहां पोस्ट किया है, शायद उनमें से कई कॉपी 1: 1
ओलिवर

1
वैसे, if elseहालत सिर्फ एक उदाहरण था या बल्कि एक स्यूडोकोड था। खैर, मैं आपकी चिंता पर विचार करता हूं और मैंने इसे संपादित किया है ..
शिशुप्रो

36

अगर मैं कुछ सुझाव (दो साल बाद लेकिन उम्मीद है कि भविष्य के पाठकों के लिए उपयोगी हो) की पेशकश कर सकते हैं :

  • सामान्य h2तत्व से बाहर फैक्टर ।
  • सामान्य oooooooooooooपाठ का कारक ।
  • if/then/elseXSLT 2.0 का उपयोग करने पर नए XPath 2.0 निर्माण के बारे में पता करें ।

XSLT 1.0 सॉल्यूशन (XSLT 2.0 के साथ भी काम करता है)

<h2>
  <xsl:choose>
    <xsl:when test="$CreatedDate > $IDAppendedDate">m</xsl:when>
    <xsl:otherwise>d</xsl:otherwise>
  </xsl:choose>
  ooooooooooooo
</h2>

XSLT 2.0 समाधान

<h2>
   <xsl:value-of select="if ($CreatedDate > $IDAppendedDate) then 'm' else 'd'"/>
   ooooooooooooo
</h2>

1

सबसे सीधा-सीधा तरीका यह है कि एक दूसरा इफ-टेस्ट किया जाए, लेकिन स्थिति उलटी है। यह तकनीक छोटी है, आंखों पर आसान है, और चयन-जब-अन्यथा नेस्टेड ब्लॉक की तुलना में सही होने के लिए आसान है:

<xsl:variable name="CreatedDate" select="@createDate"/>
     <xsl:variable name="IDAppendedDate" select="2012-01-01" />
     <b>date: <xsl:value-of select="$CreatedDate"/></b> 
     <xsl:if test="$CreatedDate &gt; $IDAppendedDate">
        <h2> mooooooooooooo </h2>
     </xsl:if>
     <xsl:if test="$CreatedDate &lt;= $IDAppendedDate">
        <h2> dooooooooooooo </h2>
     </xsl:if>

यहां एक सरकारी वेबसाइट के लिए स्टाइल-शीट में उपयोग की जा रही तकनीक का वास्तविक दुनिया उदाहरण है: http://w1.weather.gov/xml/current_obs/latest_ob.xsl


5
याद रखने और सुनिश्चित करने के बाद कि दूसरा ifपरीक्षण पहले के पूरक से मेल खाता है, किसी भी बाद के संशोधन को त्रुटि का अधिक खतरा बनाता है।
फिलिप-आंद्रे लोरिन

2
मैं सहमत हूं, पाल। इसके अलावा, मुझे लगता है कि उपरोक्त उदाहरण को पढ़ना कठिन है, जबकि इसका उपयोग <xsl:choose>करना कहीं अधिक सीधा होगा, इसका अर्थ कहीं अधिक स्पष्ट है।
डग बारबिएरी

1

मूल रूप से इस ब्लॉग पोस्ट से । हम नीचे कोड का उपयोग करके प्राप्त कर सकते हैं

<xsl:choose>
    <xsl:when test="something to test">

    </xsl:when>
    <xsl:otherwise>

    </xsl:otherwise>
</xsl:choose>

तो मैंने यह किया

<h3>System</h3>
    <xsl:choose>
        <xsl:when test="autoIncludeSystem/autoincludesystem_info/@mdate"> <!-- if attribute exists-->
            <p>
                <dd><table border="1">
                    <tbody>
                        <tr>
                            <th>File Name</th>
                            <th>File Size</th>
                            <th>Date</th>
                            <th>Time</th>
                            <th>AM/PM</th>
                        </tr>
                        <xsl:for-each select="autoIncludeSystem/autoincludesystem_info">
                            <tr>
                                <td valign="top" ><xsl:value-of select="@filename"/></td>
                                <td valign="top" ><xsl:value-of select="@filesize"/></td>
                                <td valign="top" ><xsl:value-of select="@mdate"/></td>
                                <td valign="top" ><xsl:value-of select="@mtime"/></td>
                                <td valign="top" ><xsl:value-of select="@ampm"/></td>
                            </tr>
                        </xsl:for-each>
                    </tbody>
                </table>
                </dd>
            </p>
        </xsl:when>
        <xsl:otherwise> <!-- if attribute does not exists -->
            <dd><pre>
                <xsl:value-of select="autoIncludeSystem"/><br/>
            </pre></dd> <br/>
        </xsl:otherwise>
    </xsl:choose>

मेरा आउटपुट

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.