এক্সপ্যাথ ব্যবহার করে কোনও নোডের মান হ'ল আমি কীভাবে তা পরীক্ষা করতে পারি?
কোন ধারনা?
এক্সপ্যাথ ব্যবহার করে কোনও নোডের মান হ'ল আমি কীভাবে তা পরীক্ষা করতে পারি?
কোন ধারনা?
উত্তর:
NaN এর বিপরীতে মানটি পরীক্ষা করুন :
<xsl:if test="string(number(myNode)) != 'NaN'">
<!-- myNode is a number -->
</xsl:if>
এটি একটি সংক্ষিপ্ত সংস্করণ (ধন্যবাদ @ আলেজান্দ্রো ):
<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;
আলেজান্দ্রো দ্বারা সংক্ষিপ্ত সংস্করণটি = অপারেটর ( ) এর সাথে মেলে না এমন মিলের কারণে এক্সপথ ২.০ এর সাথে সম্পূর্ণ ব্যর্থ ,
ভেরিয়েবলের মধ্যে থাকা মানটি $v
একটি সংখ্যা হিসাবে ব্যবহার করা যায় কিনা তা পরীক্ষার সবচেয়ে সংক্ষিপ্ততম উপায় :
number($v) = number($v)
আপনাকে কেবলমাত্র $v
তার অভিব্যক্তিটি দিয়ে বিকল্পটির প্রয়োজন, যার মানটি আপনি পরীক্ষা করতে চান।
ব্যাখ্যা :
number($v) = number($v)
স্পষ্টতই সত্য, যদি $v
একটি সংখ্যা হয়, বা একটি স্ট্রিং যা কোনও সংখ্যাকে উপস্থাপন করে।
এটি বুলিয়ান মানের ক্ষেত্রেও সত্য, কারণ number(true())
এটি 1 এবং number(false)
0 হয়।
যখনই $v
কোনও সংখ্যা হিসাবে ব্যবহার করা যায় না, তখন number($v)
এনএএন হয়
এবং NaN অন্য কোনও মানের সমান নয়, এমনকি নিজের কাছে।
সুতরাং, উপরোক্ত অভিব্যক্তিটি শুধুমাত্র তার জন্য সত্য $v
যার মানটি একটি সংখ্যা হিসাবে ব্যবহার করা যেতে পারে এবং অন্যথায় মিথ্যা।
number($v) = number($v)
থেকে আলাদা ফলাফল পাওয়া যায় number($v) = $v
?
number($v) = number($v)
থেকে আলাদা ফলাফল পাওয়া যায় number($v) = $v
? নিঃসন্দেহে এটি আপনার লেখা থেকে উদ্ভূত, তবে আপনি কোথায় এই প্রশ্নটি স্পষ্টভাবে সম্বোধন করেছেন তা আমি দেখছি না। আমি ঘন হয়ে থাকলে দুঃখিত। আইওডাব্লু, আপনার সমাধান এবং @ ওদেডের / @ আলেজান্দ্রোর সমাধান সর্বদা একই ফল দেয়?
আমি অন্য একটি বিকল্প সমাধান দেওয়ার চেষ্টা করছি না, তবে এই সমস্যার একটি "মেটা ভিউ"।
ওদেড এবং দিমিত্রে নোভাচাভ ইতিমধ্যে প্রদত্ত উত্তরগুলি সঠিক তবে লোকেরা "মান একটি সংখ্যা" বাক্যটি দিয়ে যা বোঝাতে পারে তা হ'ল, আমি কীভাবে এটি বলব, ব্যাখ্যা করার জন্য উন্মুক্ত।
একটি উপায়ে এটি সমস্ত এই উদ্ভট শব্দটির প্রশ্নে আসে: "আপনি কীভাবে নিজের সংখ্যার মানগুলি প্রকাশ করতে চান?"
এক্সপথ ফাংশনটি number()
যে সংখ্যাগুলিতে প্রক্রিয়া করে
মনে রাখবেন যে এটিতে সংখ্যাসূচক মানগুলির জন্য অভিব্যক্তি অন্তর্ভুক্ত নয়
এগুলি কেবল মানদণ্ডে তৈরি হয় না। স্কিমা অনুযায়ী একটি বৈধ xs:float
মান হিসাবে সামগ্রী হিসাবে একটি উপাদান উপরোক্ত বৈশিষ্ট্যযুক্ত থাকতে পারে। তবুও number()
মান ফিরে আসবে NaN
।
সুতরাং আপনার প্রশ্নের উত্তর "নোডের মান সংখ্যা হলে আমি কীভাবে এক্সপথ দিয়ে চেক করতে পারি?" হয় "ইতিমধ্যে উল্লিখিত সমাধানগুলি ব্যবহার করে number()
" ব্যবহার করে "বা" একক এক্সপথ ০.০ এক্সপ্রেশন দিয়ে, আপনি পারবেন না "। আপনার মুখোমুখি হতে পারে এমন সম্ভাব্য সংখ্যার ফর্ম্যাটগুলি সম্পর্কে চিন্তা করুন এবং যদি প্রয়োজন হয় তবে বৈধতা / নম্বর পার্সিংয়ের জন্য এক ধরণের যুক্তি লিখুন। এক্সএসএলটি প্রসেসিংয়ের মধ্যে, এটি কয়েকটি উপযুক্ত অতিরিক্ত টেম্পলেটগুলির সাহায্যে করা যেতে পারে, উদাহরণস্বরূপ।
পুনশ্চ. আপনি যদি কেবলমাত্র শূন্য নম্বরের বিষয়ে চিন্তা করেন তবে সংক্ষিপ্ততম পরীক্ষাটি
<xsl:if test="number(myNode)">
<!-- myNode is a non-zero number -->
</xsl:if>
আমি 01 এর সাথে ডিল করছি - এটি একটি সংখ্যাসূচক।
string(number($v)) != string($v)
বিভাজন করে তোলে
NaN
সংখ্যা সংখ্যার ধরণের ডাটা টাইপের মান কোনও সংখ্যার মানের সমান হয় না এবং তুলনা করার জন্য যদি কমপক্ষে একটি যুক্তি সংখ্যা ডাটা টাইপ করা হয় তবে অন্যটি সংখ্যায় ফেলে দেওয়া হয়, এটি সংক্ষিপ্ত সংখ্যা পরীক্ষা:number(MyNode)=MyNode