使用domdocument查找具有特定类名称的所有HREF

时间:2020-04-10 21:59:18

标签: php dom

假设网页中有一堆带有各种类名的href,如

<a href="http://example.com/redlink1"   class="red">link </a>
<a href="http://example.com/bluelink2"  class="blue">link </a>
<a href="http://example.com/greenlink3" class="green">link </a>
<a href="http://example.com/redlink4"   class="red">link </a>
<a href="http://example.com/bluelink5"  class="blue">link </a>
<a href="http://example.com/greenlink6" class="green">link </a>

并且我已经将html页面加载到dom.document中。

我可以使用此循环提取所有“ A”标签,然后显示HREF值

foreach($dom->getElementsByTagName('a') as $link) {
    // Show the <a href>
    echo $link->getAttribute('href') . "<br>";
}

但是如何仅获得类名称为“ blue”的HREF链接?这在FOREACH内部无效:

$blue_class_links[] = $link->getElementByClass('blue');

2 个答案:

答案 0 :(得分:1)

如果该类完全是蓝色(不是class="blue some-other-class",则可以使用getAttribute的{​​{1}}方法检查该类是否等于蓝色:

$link

答案 1 :(得分:1)

使用getAttribute('class')获取课程。

foreach($dom->getElementsByTagName('a') as $link) {
    if ($link->getAttribute('class') == "blue") {
        echo $link->getAttribute('href') . "<br>";
    }
}

如果它可以有多个类别,则需要将其拆分并搜索。

if (in_array("blue", explode(' ', $link->getAttribute('class'))))

如果您知道XPath,应该有一种方法可以立即编写一个同时与标记和类匹配的表达式,但是我从不费心地学习XPath。