Atualização: versão Xpath do *[@class~='my-class']
seletor de css
Então, depois do meu comentário abaixo em resposta ao comentário do hakre, fiquei curioso e olhei o código por trás Zend_Dom_Query
. Parece que o seletor acima foi compilado no seguinte xpath (não testado):
[contains(concat(' ', normalize-space(@class), ' '), ' my-class ')]
então o php seria:
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
Basicamente, tudo o que fazemos aqui é normalizar o class
atributo para que até uma única classe seja delimitada por espaços e a lista completa de classes seja delimitada por espaços. Em seguida, acrescente a classe que estamos procurando com um espaço. Dessa forma, estamos procurando e encontrando apenas instâncias de my-class
.
Use um seletor xpath?
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(@class, '$classname')]");
Se for apenas um tipo de elemento, você poderá substituí-lo pelo nome *
da tag específico.
Se você precisar fazer muito disso com um seletor muito complexo, recomendo Zend_Dom_Query
que suporte a sintaxe do seletor CSS (a jQuery):
$finder = new Zend_Dom_Query($html);
$classname = 'my-class';
$nodes = $finder->query("*[class~=\"$classname\"]");