Обновление: Xpath-версия *[@class~='my-class']
css selector
Итак, после моего комментария ниже в ответ на комментарий Хакре, мне стало любопытно и заглянул в код, стоящий за Zend_Dom_Query
. Похоже, что вышеупомянутый селектор скомпилирован в следующий xpath (не проверено):
[contains(concat(' ', normalize-space(@class), ' '), ' my-class ')]
так что php будет:
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
По сути, все, что мы здесь делаем, это нормализуем атрибут class
, так что даже один класс ограничен пробелами, а полный список классов ограничен пробелами. Затем добавьте класс, который мы ищем, с пробелом. Таким образом, мы эффективно ищем и находим только экземпляры my-class
.
Использовать селектор xpath?
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(@class, '$classname')]");
Если это только один тип элемента, вы можете заменить *
на определенный тэг.
Если вам нужно сделать это с очень сложным селектором, я бы порекомендовал Zend_Dom_Query
, который поддерживает синтаксис селектора CSS (в стиле jQuery):
$finder = new Zend_Dom_Query($html);
$classname = 'my-class';
$nodes = $finder->query("*[class~=\"$classname\"]");