2010-01-13 10 views
13

मैं यह जांचने का कोई तरीका नहीं समझ सकता कि तत्व का मान "सत्य" या "गलत" है या नहीं।xslt: यदि बूलियन मानों के लिए परीक्षण कैसे करें

यह एक डेटासेट से परिवर्तित बुलियन है। जब मैं मान का चयन करता हूं, तो मुझे लगता है कि यह या तो "सत्य" या "झूठा" है, लेकिन मेरे परीक्षण को अपेक्षित व्यवहार नहीं मिलता है। (यह हमेशा झूठा है।) मैंने लगभग हर चीज की कोशिश की, यह मेरा पहला एक्सएसएलटी एप्लीकेशन है, इसलिए मदद की सराहना की जाती है।

 <xsl:if test="ispassive"> 
     <tr> 
      <td> 
      <em>pasif değil</em> 
      <hr></hr> 
      </td> 
     </tr> 
     </xsl:if> 
+0

इसका मतलब क्या है? क्या यह एक विशेषता है? क्या यह एक विशेषता है जो मौजूद हो सकती है या नहीं हो सकती है? –

+0

उत्तर के लिए thx, ऐसा लगता है कि अगर मैं conditon को गलत स्थानांतरित करता हूं, यही कारण है कि यह असफल रहा। परीक्षण = "ispassive = 'true'" मेरे मामले में काम करता है। – hazimdikenli

+0

भविष्य के प्रश्नों के लिए कुछ विचार करना: आप एक ** ए का जिक्र कर रहे थे ttribute ** मान, लेकिन वास्तव में एक ** तत्व ** का मूल्यांकन कर रहे थे और यह गणना की गई पाठ मान है। आपका विवरण आपकी समस्या से बिल्कुल मेल नहीं खाता था और यदि आपने एक छोटा सा उदाहरण एक्सएमएल और एक्सएसएलटी के अधिक पोस्ट किया था तो समस्या का निदान करने में आपकी सहायता करना आसान होगा। –

उत्तर

11

निर्भर करता है कि आप अपने बूलियन का प्रतिनिधित्व कैसे करते हैं, यह बहुत सी चीजें हो सकती है, आपका डेटा कैसा दिखता है?

सबसे अधिक संभावना परिदृश्य, झूठी 0 के रूप में दर्शाया गया है और सत्य कोई गैर 0 मान हो सकता है।

<xsl:if test="$myvalue = 0"> 
    -- output if false -- 
</xsl:if> 

लेकिन आप की संभावना XSL का उपयोग करने का बेहतर कर रहे हैं: चुनें

<xsl:choose> 
    <xsl:when test="$myvalue = 0"> 
     -- output if false -- 
    </xsl:when> 
    <xsl:otherwise> 
     -- output if true -- 
    </xsl:otherwise> 
</xsl:choose> 

आप अन्यथा छोड़ सकते हैं, यदि आप इसे ज़रूरत नहीं है।

9

यह xslt वर्तमान संदर्भ में एक नोड की तलाश में है जिसे इस्पैसिव कहा जाता है।

इसलिए यदि आपके एक्सएमएल

<Root> 
    <ispassive /> 
</Root> 

है आप सही मिल जाएगा। आम तौर पर, आपको उस मूल्य के लिए xpath निर्दिष्ट करना चाहिए जिसे आप देखना चाहते हैं। अपेक्षा के अनुरूप इसलिए यदि आपके एक्सएमएल

<Root> 
     <Node ispassive="true"/> 
</Root> 

है और आप

<xsl:if test="//@ispassive = 'true'"> 

साथ

<xsl:if test="ispassive"> 

की जगह आपका स्टाइलशीट काम करेंगे।

16

यहां पोस्ट करने के बाद मुझे एहसास हुआ कि मेरा <xsl:if> परीक्षण मेरे <xsl:for-each> लूप के बाहर था।

<xsl:if> शर्तों को पुनर्स्थापित करने के बाद, मुझे पता चला कि यह मेरे लिए काम करता है।

 <xsl:if test="ispassive='true'"> 
      <tr> 
      <td> 
       <em>pasif</em> 
       <hr></hr> 
      </td> 
      </tr> 
     </xsl:if> 

'सही' के लिए ispassive तत्व का मूल्यांकन किया जाता स्ट्रिंग मान की तुलना करना ठीक काम करता है, (जो मैं पहले की कोशिश की थी, लेकिन क्योंकि मैं इसे xslt में खो जाता है, यह हमेशा क्योंकि यह ispassive चयन करने में विफल असफल रहा था तत्व के मूल्य का मूल्यांकन करने के लिए तत्व।

+0

आपका मूल परीक्षण मानदंड इसके मूल्य के बावजूद, 'ispassive' तत्व की उपस्थिति की पुष्टि कर रहा था। इसलिए, जब तक एक उपस्थित था तब तक यह 'सत्य() 'वापस आ जाएगा।'Ispassive' तत्व के ** मान ** का मूल्यांकन करने के लिए परीक्षण को बदलकर, यह मान केवल सत्य()' देता है यदि मान "सत्य" है। –

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