我只想自行选择一个名为.date的类
由于某种原因,我无法使它正常工作。如果有人知道我的代码出了什么问题,将不胜感激。
@$doc = new DOMDocument(); @$doc->loadHTML($html); $xml = simplexml_import_dom($doc); // just to make xpath more simple $images = $xml->xpath('//[@class="date"]'); foreach ($images as $img) { echo $img." "; }
我想写这个问题的规范答案,因为上面的答案有问题。
该 CSS 选择器:
.foo
将选择具有 foo 类的任何元素。
您如何在XPath中做到这一点?
尽管XPath比CSS强大,但是 XPath没有CSS类选择器的本机等效项 。但是,有一个解决方案。
XPath中 的等效选择器是:
//*[contains(concat(" ", normalize-space(@class), " "), " foo ")]
该函数对空格进行归一化处理,以去除前导和尾随空格(并且还将空格字符序列替换为单个空格)。
(从更一般的意义上讲)这也等同于CSS选择器:
*[class~="foo"]
它将匹配任何其 类 属性值是由空格分隔的值的列表的元素,其中一个值与 foo 完全相等。
XPath选择器:
//*[@class="foo"]
不起作用!例如,因为它不匹配具有多个类的元素
<div class="foo bar">
如果在类名周围有多余的空格,它也将不匹配:
<div class=" foo ">
“改进”的XPath选择器
//*[contains(@class, "foo")]
也不行!因为它错误地将元素与 foobar 类匹配,例如
<div class="foobar">