Actualización: versión Xpath del *[@class~='my-class']
selector css
Entonces, después de mi comentario a continuación en respuesta al comentario de hakre, sentí curiosidad y busqué en el código detrás Zend_Dom_Query
. Parece que el selector anterior está compilado en el siguiente xpath (no probado):
[contains(concat(' ', normalize-space(@class), ' '), ' my-class ')]
entonces el php sería:
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
Básicamente, todo lo que hacemos aquí es normalizar el class
atributo para que incluso una sola clase esté limitada por espacios, y la lista de clases completa esté limitada por espacios. Luego agregue la clase que estamos buscando con un espacio. De esta manera, estamos buscando y encontrando de manera efectiva instancias de my-class
.
¿Usar un selector xpath?
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(@class, '$classname')]");
Si solo es un tipo de elemento, puede reemplazarlo *
con el nombre de etiqueta particular.
Si necesita hacer mucho de esto con un selector muy complejo, recomendaría Zend_Dom_Query
que admita la sintaxis del selector CSS (a la jQuery):
$finder = new Zend_Dom_Query($html);
$classname = 'my-class';
$nodes = $finder->query("*[class~=\"$classname\"]");