मैं जांच कैसे कर सकता हूं कि कोई नोड मान XPath का उपयोग कर संख्या है या नहीं?XPath परीक्षण यदि नोड मान संख्या
कोई विचार?
मैं जांच कैसे कर सकता हूं कि कोई नोड मान XPath का उपयोग कर संख्या है या नहीं?XPath परीक्षण यदि नोड मान संख्या
कोई विचार?
टेस्ट NaN के खिलाफ मूल्य:
<xsl:if test="string(number(myNode)) != 'NaN'">
<!-- myNode is a number -->
</xsl:if>
यह एक छोटा संस्करण है (धन्यवाद @Alejandro):
<xsl:if test="number(myNode) = myNode">
<!-- myNode is a number -->
</xsl:if>
कम से कम जिस तरह से परीक्षण करने के लिए यदि किसी वैरिएबल $v
में निहित मूल्य कर सकते हैं एक संख्या के रूप में इस्तेमाल किया जाना चाहिए:
number($v) = number($v)
आपको केवल उस अभिव्यक्ति के साथ $v
को प्रतिस्थापित करने की आवश्यकता है जिसका मूल्य आप परीक्षण करना चाहते हैं।
स्पष्टीकरण: अगर $v
एक नंबर, या एक स्ट्रिंग है कि एक संख्या का प्रतिनिधित्व करता है
number($v) = number($v)
, स्पष्ट रूप से सच है।
यह एक बूलियन मान के लिए भी सही है, क्योंकि एक number(true())
, number($v)
1 और number(false)
0.
है जब भी $v
एक नंबर के रूप में इस्तेमाल नहीं किया जा सकता है तो NaN
है और NaN के बराबर नहीं है कोई अन्य मूल्य, यहां तक कि खुद के लिए भी।
इस प्रकार, उपरोक्त अभिव्यक्ति केवल $v
के लिए सही है जिसका मूल्य किसी संख्या के रूप में उपयोग किया जा सकता है, और अन्यथा झूठा।
+1 सहायक स्पष्टीकरण। क्या कोई ऐसे मामलों पर टिप्पणी कर सकता है जहां 'संख्या ($ v) = संख्या ($ v)' 'संख्या ($ v) = $ v' से अलग परिणाम उत्पन्न करती है? – LarsH
@ लार्सएच: मैंने पहले ही इन मामलों पर टिप्पणी की है।क्या आप अभी तक एक अनिश्चित मामला बता सकते हैं? –
मेरा मतलब है कि कोई ऐसे मामलों को सूचीबद्ध कर सकता है जहां 'संख्या ($ v) = संख्या ($ v)' 'संख्या ($ v) = $ v' से भिन्न परिणाम उत्पन्न करती है? निस्संदेह जो आपने लिखा है उससे व्यर्थ है, लेकिन मैं नहीं देख रहा हूं कि आपने इस सवाल को स्पष्ट रूप से कहाँ संबोधित किया था। क्षमा करें अगर मैं घना हो रहा हूँ। आईओओ, क्या आपका समाधान और @ ओडेड/@ अलेजैंड्रो का समाधान हमेशा एक ही परिणाम देता है? – LarsH
मैं अभी तक एक और वैकल्पिक समाधान प्रदान करने की कोशिश नहीं कर रहा हूं, लेकिन इस समस्या के लिए "मेटा व्यू"।
ओडेड और डिमिट्रे नोवाटेचेव द्वारा पहले से प्रदान किए गए उत्तर सही हैं लेकिन वाक्यांशों के साथ वास्तव में क्या मतलब हो सकता है "मूल्य एक संख्या है" है, मैं इसे कैसे कहूं, व्याख्या के लिए खुला हूं।
एक तरह से यह सब इस विचित्र ध्वनि प्रश्न के लिए आता है: "आप अपने संख्यात्मक मूल्यों को कैसे व्यक्त करना चाहते हैं?"
XPath समारोह number()
प्रक्रियाओं की संख्या केवल ऋणात्मक मानों
ध्यान दें कि यह संख्यात्मक मानों कि
ये सिर्फ ऊपर मापदंड नहीं बना रहे हैं के लिए मूल्य में शामिल एक अंतर है। स्कीमा के अनुसार सामग्री वाला एक तत्व मान्य xs:float
मान में उपर्युक्त विशेषताओं में से कोई भी हो सकता है। फिर भी number()
मूल्य NaN
वापस करेगा।
तो अपने प्रश्न का उत्तर दें "यदि नोड मान संख्या है तो मैं XPath के साथ कैसे जांच सकता हूं?" या तो "number()
" या "एक एक्सपीएथ 1.0 अभिव्यक्ति के साथ पहले से ही उल्लिखित समाधानों का उपयोग करें, आप नहीं कर सकते"। संभावित संभावित प्रारूपों के बारे में सोचें जो आपको मिल सकती हैं, और यदि आवश्यक हो, तो सत्यापन/संख्या पार्सिंग के लिए किसी प्रकार का तर्क लिखें। एक्सएसएलटी प्रसंस्करण के भीतर, उदाहरण के लिए, कुछ उपयुक्त अतिरिक्त टेम्पलेट्स के साथ किया जा सकता है।
पीएस।
string(//Sesscode) castable as xs:decimal
castable W3C here द्वारा प्रलेखित है: यदि आप केवल गैर शून्य संख्या के बारे में परवाह है, तो कम से कम परीक्षण
<xsl:if test="number(myNode)">
<!-- myNode is a non-zero number -->
</xsl:if>
+1 प्रश्न के पीछे मुद्दों के बारे में अच्छी विस्तृत व्याख्या: ओपी का क्या अर्थ हो सकता है या इसका मतलब होगा कि क्या वह जानना चाहता था कि क्या पूछना है। – LarsH
तुम हमेशा कुछ इस तरह इस्तेमाल कर सकते हैं है।
एक मैं बहुत उपयोगी पाया है निम्नलिखित:
<xsl:choose>
<xsl:when test="not(number(myNode))">
<!-- myNode is a not a number or empty(NaN) or zero -->
</xsl:when>
<xsl:otherwise>
<!-- myNode is a number (!= zero) -->
</xsl:otherwise>
</xsl:choose>
वहाँ XPath 2.0 में एक अद्भुत प्रकार परीक्षण ऑपरेटर का उपयोग कर सकते है:
<xsl:if test="$number castable as xs:double">
<!-- implementation -->
</xsl:if>
क्योंकि XPath में 1.0 'NaN' संख्या के मूल्य डेटा प्रकार किसी भी संख्या मान के बराबर नहीं है और तुलना के लिए यदि कम से कम एक तर्क संख्या डेटा टाइप किया गया है तो दूसरा नंबर पर डाला जाता है, यह सबसे छोटा संख्या परीक्षण है: 'संख्या (MyNode) = MyNode' –
द्वारा संक्षिप्त संस्करण @Alejandro पूरी तरह से XPath 2.0 के साथ विफल रहता है क्योंकि वें पर मेल नहीं मिला है ई = ऑपरेटर ('= 'के पहले ऑपरेंड का आवश्यक आइटम प्रकार संख्यात्मक है; आपूर्ति किए गए मान में आइटम प्रकार xs है: स्ट्रिंग; '), Dimitre का समाधान ठीक काम करता है। – Lucero