बूलियन मूल्य कैसे बनाएं?


86

मैं XSLT के लिए पूरी तरह से नया हूं और मैं निम्नलिखित कोड के साथ गलत काम नहीं कर सकता हूं।

<xsl:variable name="var" select="boolean('false')"/>

<xsl:if test="$var'">variable is true</xsl:if>

यह हमेशा सच है जब यह गलत होने का मतलब है। क्यों?


3
यदि आप अपना शीर्षक एक उचित प्रश्न के रूप में लिखते हैं और l33t बोलने से बचते हैं, तो बस एक सुझाव, लेकिन आपको जवाब का बेहतर कैलिबर मिल सकता है।
विल डीन

जवाबों:


168

में परिभाषित के रूप में $ चर चर का मूल्य:

   <xsl:variable name="var" select="boolean('false')"/>

है

   true()

ऐसा इसलिए है क्योंकि XPath " false" एक साधारण स्ट्रिंग है, जैसा कि विरोध किया गया है false(), जो booleanमूल्य के लिए निर्माता हैfalse()

XPath में दो बूलियन मान हैं (ध्यान दें कि वे निर्मित हैं!):

   true() तथा false()

बूलियन के लिए किसी भी मूल्य को परिवर्तित करने के विवरण को XPath कल्पना से बाहर रखा गया है । "

" बूलियन फ़ंक्शन अपने तर्क को बूलियन के रूप में परिवर्तित करता है:

  • एक संख्या सच है अगर और केवल अगर यह न तो सकारात्मक या नकारात्मक शून्य है और न ही NaN

  • नोड-सेट सत्य है यदि और केवल यदि यह गैर-रिक्त है

  • एक स्ट्रिंग सच है अगर और केवल अगर इसकी लंबाई गैर-शून्य है

  • चार मूल प्रकारों के अलावा अन्य प्रकार की एक वस्तु एक प्रकार से बूलियन में बदल जाती है जो उस प्रकार पर निर्भर होती है "

आपके मामले में स्ट्रिंग "झूठी" संख्या 0 नहीं है और एक सकारात्मक लंबाई है, इसलिए ऊपर दी गई 3 गोली में नियम लागू होता है, उपज true()

इसलिए, XSLT 1.0 में एक चर को परिभाषित करने के लिए, जिसका मूल्य है false() , एक को निम्नलिखित के रूप में परिभाषा लिखने की आवश्यकता है:

   <xsl:variable name="vMyVar" select="false()"/>

या, यदि आपको यह ठीक से याद नहीं है, तो आप हमेशा लिख ​​सकते हैं:

   <xsl:variable name="vMyVar" select="1 = 0"/>

(जो भी मूल्यांकन करता है उसे निर्दिष्ट करें false()) और XSLT प्रोसेसर आपके लिए काम करेगा।

XSLT 2.0 में हमेशा चर के प्रकार को स्पष्ट रूप से निर्दिष्ट करना बेहतर होता है :

   <xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>


@DimitreNovatchev हाय दिमित्रे। यदि XSL परिवर्तन फ़ाइल में बूलियन मान को हार्डकोड किया गया है तो यह समाधान है। वहाँ एक स्वच्छ समाधान के लिए आ रहा है falseऔर trueतार से परिवर्तन आ रहा है कि स्ट्रिंग तुलना शामिल नहीं है?
जैगर

1
@ जैगर, यह एक और सवाल के लिए है। यह प्रश्न " बूलियन मूल्य कैसे बनाएं " पूछता है और इसका सटीक उत्तर मिला है। आप पूछ रहे हैं: " बूलियन मूल्यों में विशेष स्ट्रिंग की व्याख्या (या पार्स) कैसे करें " - यह एक पूरी तरह से अलग सवाल है। क्या मैं पूछ सकता हूं कि स्ट्रिंग तुलना में गलत क्या है?
दिमित्रे नोवाचेव

17

बूलियन () फ़ंक्शन आप उपयोग कर रहे हैं वास्तव में यह काम कर रहा है। स्पष्ट सच्चे और झूठे मूल्यों का उपयोग करने के लिए आपको निम्नलिखित कार्यों का उपयोग करना चाहिए:

<xsl:variable name="var_false" select="false()"/>
<xsl:variable name="var_true" select="true()"/>

MSDN प्रलेखन के अनुसार, बस FYI करें, बूलियन () निम्नलिखित लौटाता है:

  • यदि तर्क एक नकारात्मक या सकारात्मक संख्या है, तो इसे बूलियन मान में बदल दिया जाता है।
  • यदि तर्क शून्य या NaN मान है, तो इसे गलत में बदल दिया जाता है।
  • यदि तर्क एक गैर-रिक्त नोड-सेट है, तो इसे सत्य में बदल दिया जाता है। एक खाली नोड-सेट गलत में बदल जाता है।
  • यदि तर्क एक गैर-रिक्त स्ट्रिंग है, तो इसे सत्य में बदल दिया जाता है । एक खाली स्ट्रिंग झूठी में बदल जाती है।
  • यदि तर्क चार मूल प्रकारों के अलावा एक प्रकार की वस्तु है, तो इसे एक बूलियन में परिवर्तित किया जाता है जो उस प्रकार पर निर्भर है।

आपको अपनी सूची के अधिक से अधिक बाहर खड़े होने के लिए अपनी आइटम का सुधार करना चाहिए, क्योंकि यह महत्वपूर्ण है। "बूलियन ('')" असत्य का भी उत्पादन करेगा।
टॉमालक

2
@ तोमलक, मेरा जवाब देखिए। यह थोड़ा अधिक विस्तृत है और सच्चे स्रोत को उद्धृत करता है: W3C XPath कल्पना, "MSDN" के बजाय।

1
@Dimitre: मुझे नहीं लगता कि MSDN इस संबंध में W3C कल्पना से बहुत अधिक विचलित करता है। :) लेकिन उनका कहना है वहाँ पाठ्यक्रम अधिक सही की है।
टॉमालक

5

इस स्तर पर शायद थोड़ी देर हो सकती है लेकिन बूलियंस से निपटने के लिए सिर्फ प्रयास के लायक नहीं है। मैं कैसे एक बूलियन (अनिवार्य) डीबी से वापस आने से निपटा:

<xsl:variable name="vTrue" select="true()"/>                     
    <xsl:choose>
      <xsl:when test="string(Mandatory) = string($vTrue)">
        <xsl:text>Mandatory</xsl:text>
      </xsl:when>
      <xsl:otherwise>           
      </xsl:otherwise>
    </xsl:choose>

आशा है कि यह किसी की मदद करता है

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