Aggiornamento: versione Xpath del *[@class~='my-class']selettore css
Quindi, dopo il mio commento qui sotto in risposta al commento di hakre, mi sono incuriosito e ho esaminato il codice dietro Zend_Dom_Query. Sembra che il selettore sopra sia compilato nel seguente xpath (non testato):
[contains(concat(' ', normalize-space(@class), ' '), ' my-class ')]
quindi il php sarebbe:
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
Fondamentalmente, tutto ciò che facciamo qui è normalizzare l' classattributo in modo che anche una singola classe sia delimitata da spazi e l'elenco completo delle classi sia limitato da spazi. Quindi aggiungi la classe che stiamo cercando con uno spazio. In questo modo cerchiamo e troviamo effettivamente solo istanze di my-class.
Utilizzare un selettore xpath?
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(@class, '$classname')]");
Se si tratta di un solo tipo di elemento puoi sostituire il *con il particolare tagname.
Se hai bisogno di fare molto di questo con un selettore molto complesso, consiglierei Zend_Dom_Queryche supporta la sintassi del selettore CSS (a la jQuery):
$finder = new Zend_Dom_Query($html);
$classname = 'my-class';
$nodes = $finder->query("*[class~=\"$classname\"]");