*[@class~='my-class']css选择器的Xpath版本
所以在我的评论下面回应hakre的评论后,我很好奇,并查看了背后的代码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选择器语法(la jQuery):$finder = new Zend_Dom_Query($html);$classname = 'my-class';$nodes = $finder->query("*[class~=\"$classname\"]");