मैं इस प्रश्न का विहित उत्तर लिखना चाहता हूं क्योंकि उपरोक्त उत्तर में समस्या है।
हमारी समस्या
सीएसएस चयनकर्ता:
.foo
ऐसे किसी भी तत्व का चयन करेगा जिसमें वर्ग foo है ।
आप XPath में यह कैसे करते हैं?
हालाँकि XPath CSS से अधिक शक्तिशाली है, लेकिन XPath में CSS क्लास चयनकर्ता के मूल समकक्ष नहीं है । हालांकि, एक समाधान है।
इसे करने का सही तरीका
में समतुल्य चयनकर्ता XPath है:
//*[contains(concat(" ", normalize-space(@class), " "), " foo ")]
फ़ंक्शन सामान्य-स्पेस स्ट्रिप्स को लीड करता है और व्हाट्सएप को पीछे छोड़ता है (और एक सिंगल स्पेस द्वारा व्हाट्सएप कैरेक्टर के सीक्वेंस को भी बदल देता है)।
(अधिक सामान्य अर्थ में) यह सीएसएस चयनकर्ता के समकक्ष भी है:
*[class~="foo"]
जो किसी भी तत्व जिसका वर्ग से मेल खाएगा गुण मान व्हाट्सएप-अलग-अलग मूल्यों की एक सूची है, जिनमें से एक फू के बराबर है ।
यह करने के लिए स्पष्ट, लेकिन गलत तरीके के एक जोड़े
XPath चयनकर्ता:
//*[@class="foo"]
काम नहीं करता है! क्योंकि यह एक ऐसे तत्व से मेल नहीं खाएगा जिसमें एक से अधिक वर्ग हों, उदाहरण के लिए
<div class="foo bar">
वर्ग के नाम के आसपास कोई अतिरिक्त व्हाट्सएप होने पर भी यह मेल नहीं खाएगा:
<div class=" foo ">
'बेहतर' XPath चयनकर्ता
//*[contains(@class, "foo")]
या तो काम नहीं करता है! क्योंकि यह गलत तरीके से क्लास फोब्बर के तत्वों से मेल खाता है , उदाहरण के लिए
<div class="foobar">
क्रेडिट इस फेला को जाता है, जो इस समस्या का सबसे पहला प्रकाशित समाधान था जो मुझे वेब पर मिला:
http://dubinko.info/blog/2007/10/01/simple-parsing-of-space-seprated-attades- इन-xpathxslt /