আমি এই প্রশ্নের ক্যানোনিকাল উত্তর লিখতে চাই কারণ উপরের উত্তরটিতে একটি সমস্যা আছে।
আমাদের সমস্যা
সিএসএস নির্বাচক:
.foo
ক্লাস ফুও রয়েছে এমন কোনও উপাদান নির্বাচন করবে ।
এক্সপ্যাটে আপনি কীভাবে এটি করেন?
যদিও এক্সপ্যাথ সিএসএসের চেয়ে বেশি শক্তিশালী, এক্সপ্যাথের কোনও সিএসএস শ্রেণি নির্বাচকের নেটিভ সমতুল্য নেই । তবে এর সমাধানও রয়েছে।
এটি করার সঠিক উপায়
এক্সপ্যাটে সমতুল্য নির্বাচক হলেন:
//*[contains(concat(" ", normalize-space(@class), " "), " foo ")]
ফাংশনটি নরমালাইজ-স্পেস স্ট্রিপগুলি শীর্ষস্থানীয় এবং সাদা সাদা জায়গার পিছনে ফেলে দেয় (এবং একক স্থানের দ্বারা সাদা স্থানের অক্ষরের ক্রমগুলিও প্রতিস্থাপন করে)।
(আরও সাধারণ অর্থে) এটি সিএসএস নির্বাচকের সমতুল্য:
*[class~="foo"]
যা শ্রেণীর বৈশিষ্ট্যের মান হ'ল স্পেস-বিভাজিত মানগুলির তালিকা হিসাবে এমন কোনও উপাদানের সাথে মিলবে , যার একটি হুবহু foo এর সমান ।
এটি করার কয়েকটি সুস্পষ্ট, তবে ভুল উপায়
এক্সপ্যাথ নির্বাচক:
//*[@class="foo"]
কাজ করে না! কারণ এটি এমন কোনও উপাদানের সাথে মেলে না যেটির একাধিক শ্রেণি রয়েছে, উদাহরণস্বরূপ
<div class="foo bar">
শ্রেণীর নামের আশেপাশে কোনও অতিরিক্ত সাদা জায়গা থাকলেও এটি মেলে না:
<div class=" foo ">
'উন্নত' এক্সপ্যাথ নির্বাচক
//*[contains(@class, "foo")]
কাজ করে না! কারণ এটি ভুলভাবে বর্গ উপাদানের সাথে মিলে যায় FOOBAR , উদাহরণস্বরূপ
<div class="foobar">
ক্রেডিট এই ফেল্লার কাছে যায়, যিনি আমি ওয়েবে এই সমস্যাটির প্রথম প্রকাশিত সমাধান পেয়েছি:
http://dubinko.info/blog/2007/10/01/simple-parsing-of-space-seprated-attributes- ইন-এক্সপাথেক্স্লট /