Найти все HREF с указанием c имя класса с domdocument - PullRequest
0 голосов
/ 11 апреля 2020

Предполагается, что на веб-странице есть несколько ссылок с различными именами классов, как в

<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» с помощью этого l oop, а затем отобразить значение HREF

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

Но как мне получить только те ссылки HREF, которые имеют имя класса «синий»? Это не работает внутри FOREACH:

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

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Используйте 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.

1 голос
/ 11 апреля 2020

Если класс точно синий (а не class="blue some-other-class", вы можете использовать метод getAttribute $link, чтобы проверить, равен ли класс синему:

foreach($dom->getElementsByTagName('a') as $link) {
    // Show the <a href>
    if ($link->getAttribute("class") == "blue") {
        echo $link->getAttribute('href') . "<br>";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...