मैं कैसे जांच सकता हूं कि क्या एक नोड मूल्य 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>
Required item type of first operand of '=' is numeric; supplied value has item type xs:string;
) पर टाइप बेमेल के कारण @Alejandro द्वारा लघु संस्करण पूरी तरह से XPath 2.0 के साथ विफल हो जाता है , लेकिन दिमित्रे का समाधान ठीक काम करता है।
यह जांचने का सबसे कम संभव तरीका है कि चर में निहित मूल्य का $v
उपयोग संख्या के रूप में किया जा सकता है :
number($v) = number($v)
आपको केवल $v
उस अभिव्यक्ति के साथ उपरोक्त विकल्प की आवश्यकता है, जिसका मूल्य आप परीक्षण करना चाहते हैं।
स्पष्टीकरण :
number($v) = number($v)
स्पष्ट रूप से सच है, अगर $v
एक संख्या है, या एक स्ट्रिंग है जो एक संख्या का प्रतिनिधित्व करती है।
यह एक बूलियन मूल्य के लिए भी सच है, क्योंकि एक number(true())
1 है और number(false)
0 है।
जब भी $v
एक नंबर के रूप में इस्तेमाल नहीं किया जा सकता है, तो number($v)
NaN है
और NaN किसी भी अन्य मूल्य के बराबर नहीं है, यहां तक कि खुद के लिए भी।
इस प्रकार, उपरोक्त अभिव्यक्ति केवल उसी के लिए सही है $v
जिसका मूल्य एक संख्या के रूप में इस्तेमाल किया जा सकता है, और अन्यथा गलत।
number($v) = number($v)
से एक अलग परिणाम मिलता है number($v) = $v
?
number($v) = number($v)
से एक अलग परिणाम मिलता है number($v) = $v
? संदेह है कि आपने जो लिखा है, उससे व्युत्पन्न है, लेकिन मैं यह नहीं देख रहा हूं कि आपने इस प्रश्न को स्पष्ट रूप से कहां संबोधित किया है। क्षमा करें यदि मैं सघन हो रहा हूँ। IOW, क्या आपका समाधान और @ Oded / @ एलेजैंड्रो का समाधान हमेशा एक ही परिणाम देता है?
मैं अभी तक एक और वैकल्पिक समाधान प्रदान करने की कोशिश नहीं कर रहा हूं, लेकिन इस समस्या के लिए एक "मेटा दृश्य"।
ओड और दिमित्रे नोवाचेव द्वारा पहले से उपलब्ध कराए गए उत्तर सही हैं लेकिन लोगों को "मूल्य एक संख्या है" वाक्यांश के साथ वास्तव में क्या मतलब हो सकता है, मैं इसे कैसे कहूंगा, व्याख्या के लिए खुला।
एक तरह से यह सब इस विचित्र लगने वाले सवाल पर आता है: "आप अपने संख्यात्मक मूल्यों को कैसे व्यक्त करना चाहते हैं?"
XPath फ़ंक्शन उन number()
संख्याओं को संसाधित करता है जो हैं
ध्यान दें कि इसमें संख्यात्मक मानों के लिए भाव शामिल नहीं हैं
ये सिर्फ मापदंड नहीं बने हैं। स्कीमा के साथ एक तत्व जो स्कीमा के अनुसार मान्य xs:float
है, उसमें उपरोक्त वर्णित विशेषताओं में से कोई भी हो सकता है। फिर भी number()
मान लौटाएगा NaN
।
तो अपने प्रश्न का उत्तर दें कि "नोड मूल्य संख्या होने पर मैं XPath के साथ कैसे जांच कर सकता हूं?" या तो " number()
एक एक्सपीथ 1.0 अभिव्यक्ति के साथ" या " का उपयोग करके पहले से ही उल्लिखित समाधान का उपयोग करें , आप नहीं कर सकते हैं"। आपके द्वारा सामना किए जा सकने वाले संभावित संख्या स्वरूपों के बारे में सोचें, और यदि आवश्यक हो, तो सत्यापन / संख्या पार्सिंग के लिए किसी प्रकार के तर्क को लिखें। XSLT प्रसंस्करण के भीतर, यह कुछ उपयुक्त अतिरिक्त टेम्पलेट्स के साथ किया जा सकता है, उदाहरण के लिए।
पुनश्च। यदि आप केवल गैर-शून्य संख्याओं के बारे में परवाह करते हैं, तो सबसे छोटा परीक्षण है
<xsl:if test="number(myNode)">
<!-- myNode is a non-zero number -->
</xsl:if>
NaN
में संख्या डेटा प्रकार का 1.0 मान किसी भी संख्या मान के बराबर नहीं है और तुलना के लिए यदि कम से कम एक तर्क संख्या डेटा टाइप किया गया है, तो दूसरा नंबर पर डाला जाता है, यह सबसे छोटी संख्या परीक्षण है:number(MyNode)=MyNode