Saya ingin menulis jawaban kanonik untuk pertanyaan ini karena jawaban di atas memiliki masalah.
Masalah kita
The CSS selector:
.foo
akan memilih elemen apapun yang memiliki kelas foo .
Bagaimana Anda melakukan ini di XPath?
Meskipun XPath lebih kuat dari CSS, XPath tidak memiliki native setara dengan pemilih kelas CSS . Namun, ada solusinya.
Cara yang tepat untuk melakukannya
Pemilih yang setara di XPath adalah:
//*[contains(concat(" ", normalize-space(@class), " "), " foo ")]
Fungsi menormalkan strip spasi di depan dan di belakang spasi putih (dan juga menggantikan urutan karakter spasi putih dengan satu spasi).
(Dalam pengertian yang lebih umum) ini juga setara dengan pemilih CSS:
*[class~="foo"]
yang akan cocok dengan elemen apa pun yang nilai atribut kelasnya adalah daftar nilai yang dipisahkan spasi, salah satunya sama persis dengan foo .
Sepasang cara yang jelas, tetapi salah untuk melakukannya
Pemilih XPath:
//*[@class="foo"]
tidak bekerja! karena tidak akan cocok dengan elemen yang memiliki lebih dari satu kelas, misalnya
<div class="foo bar">
Itu juga tidak akan cocok jika ada spasi ekstra di sekitar nama kelas:
<div class=" foo ">
Pemilih XPath yang 'ditingkatkan'
//*[contains(@class, "foo")]
tidak berhasil! karena salah mencocokkan elemen dengan kelas foobar , misalnya
<div class="foobar">
Penghargaan diberikan kepada kawan ini, yang merupakan solusi paling awal yang diterbitkan untuk masalah ini yang saya temukan di web:
http://dubinko.info/blog/2007/10/01/simple-parsing-of-space-seprated-attributes- di-xpathxslt /