Pembaruan: versi Xpath dari *[@class~='my-class']
pemilih css
Jadi setelah komentar saya di bawah ini sebagai tanggapan atas komentar hakre, saya penasaran dan melihat kode di belakang Zend_Dom_Query
. Sepertinya pemilih di atas dikompilasi ke xpath berikut (belum diuji):
[contains(concat(' ', normalize-space(@class), ' '), ' my-class ')]
jadi phpnya adalah:
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
Pada dasarnya, semua yang kami lakukan di sini adalah menormalkan class
atribut sehingga bahkan satu kelas pun dibatasi oleh spasi, dan daftar kelas lengkap dibatasi dalam spasi. Kemudian tambahkan kelas yang kita cari dengan spasi. Dengan cara ini kami secara efektif mencari dan menemukan hanya contoh my-class
.
Gunakan pemilih xpath?
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(@class, '$classname')]");
Jika hanya satu jenis elemen Anda dapat mengganti *
dengan tagname tertentu.
Jika Anda perlu melakukan banyak hal ini dengan pemilih yang sangat kompleks, saya akan merekomendasikan Zend_Dom_Query
yang mendukung sintaks pemilih CSS (a la jQuery):
$finder = new Zend_Dom_Query($html);
$classname = 'my-class';
$nodes = $finder->query("*[class~=\"$classname\"]");