Mise à jour: version Xpath du *[@class~='my-class']
sélecteur css
Donc, après mon commentaire ci-dessous en réponse au commentaire de hakre, je suis devenu curieux et j'ai regardé le code derrière Zend_Dom_Query
. Il semble que le sélecteur ci-dessus soit compilé sur le chemin xpath suivant (non testé):
[contains(concat(' ', normalize-space(@class), ' '), ' my-class ')]
donc le php serait:
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
Fondamentalement, tout ce que nous faisons ici est de normaliser l' class
attribut afin que même une seule classe soit délimitée par des espaces et que la liste complète des classes soit délimitée par des espaces. Ajoutez ensuite la classe que nous recherchons avec un espace. De cette façon, nous recherchons et trouvons uniquement des instances de my-class
.
Utiliser un sélecteur xpath?
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(@class, '$classname')]");
S'il ne s'agit que d'un seul type d'élément, vous pouvez remplacer le *
par la variable particulière.
Si vous avez besoin d'en faire beaucoup avec un sélecteur très complexe, je recommanderais celui Zend_Dom_Query
qui prend en charge la syntaxe du sélecteur CSS (à la jQuery):
$finder = new Zend_Dom_Query($html);
$classname = 'my-class';
$nodes = $finder->query("*[class~=\"$classname\"]");