Простой синтаксический анализатор html dom — поиск значения в атрибуте

#php #parsing

#php #синтаксический анализ

Вопрос:

 <div class="bk-cell-wrapper">
<div class="bk-timetable-cell">
div class="day-item-hover" data-detail="{**value i want to find**}" >BlaBlaBlabLa</div>
</div>
</div>
 

из этого шаблона, который повторяется несколько раз, я хочу извлечь все divs с атрибутом «data-detail» в нем.
Я сделал это с помощью этого кода :

 $html = file_get_html($url);
  foreach($html->find('div[data-detail]') as $element )
  echo $element
 

теперь я хочу извлечь значение в атрибуте «data-detail» из переменной $element, где я храню каждый div с attr «data-detail» в нем

просмотр-источник: https://oa-poruba.bakalari.cz/Расписание / Общедоступный / Актуальный / Класс / WV

Ответ №1:

Вы можете сделать это следующим образом:

 $html = file_get_html($url);
$myDiv = $html->find('div[data-detail]');
  foreach($myDiv as $element ) {
    echo $element->getAttribute('data-detail');
  }
 

Ответ №2:

вы можете использовать этот пакет php-html-parser

и получите то, что вы хотите, вот так:

 require "vendor/autoload.php";
use PHPHtmlParserDom;

$dom = new Dom;
$dom->loadStr('<div class="all"><p>Hey bro, <a href="google.com">click here</a><br /> :)</p></div>');
$a = $dom->find('a')[0];
echo $a->text; // "click here"
 

А также получить атрибут следующим образом:

 // Assuming you installed from Composer:
require "vendor/autoload.php";
use PHPHtmlParserDom;

$dom = new Dom;
$dom->loadFromFile('tests/data/big.html');
$contents = $dom->find('.content-border');
echo count($contents); // 10

foreach ($contents as $content)
{
    // get the class attr
    $class = $content->getAttribute('class');
}