Сортируйте вопрос из двух частей, но, возможно, ответьте на другой вопрос. Я пытаюсь получить часть информации из
<div id="foo"> <div class="bar"><a data1="xxxx" data2="xxxx" href="http://foo.bar">Inner text"</a> <div class="bar2"><a data3="xxxx" data4="xxxx" href="http://foo.bar">more text"</a>
Вот что я сейчас использую.
$articles = array(); $html=file_get_html('http://foo.bar'); foreach($html->find('div[class=bar] a') as $a){ $articles[] = array($a->href,$a->innertext); }
Это отлично работает, чтобы захватить href и внутренний текст из первого div-класса. Я попытался добавить $ a-> data1 в foreach, но это не сработало.
Как я могу захватить те внутренние теги данных одновременно, когда я захватываю href и innertext.
Также есть хороший способ получить оба класса с одним утверждением? Я предполагаю, что смогу построить поиск id и захватить всю информацию div.
благодаря
Чтобы захватить все эти атрибуты, вы должны прежде чем исследовать анализируемый элемент, например:
foreach($html->find('div[class=bar] a') as $a){ var_dump($a->attr); }
… и посмотреть, существуют ли эти атрибуты. Они не кажутся действительными HTML, поэтому, возможно, парсер отбрасывает их.
Если они существуют, вы можете прочитать их следующим образом:
foreach($html->find('div[class=bar] a') as $a){ $article = array($a->href, $a->innertext); if (isset($a->attr['data1'])) { $article['data1'] = $a->attr['data1']; } if (isset($a->attr['data2'])) { $article['data2'] = $a->attr['data2']; } //... $articles[] = $article; }
Чтобы получить оба класса, вы можете использовать множественный селектор, разделенный запятой:
foreach($html->find('div[class=bar] a, div[class=bar2] a') as $a){ ...
Я знаю, что этот вопрос старый, но ОП спросил, как получить все атрибуты в одном утверждении. Я просто сделал это для проекта, над которым я работаю.
Вы можете получить все атрибуты для элемента с getAllAttributes()
. Результаты автоматически сохраняются в свойстве array, называемом attr
.
В приведенном ниже примере я хватаю все ссылки, но вы можете использовать это с тем, что хотите. ПРИМЕЧАНИЕ. Это также работает с атрибутами data-
. Поэтому, если есть атрибут, называемый data-url
он будет доступен с помощью $e->attr['data-url']
после запуска метода getAllAttributes
.
В вашем случае атрибуты, которые вы ищете, будут $e->attr['data1']
и $e->attr['data2']
. Надеюсь, это поможет кому-то, если не OP.
Получить все атрибуты
$html = file_get_html('somefile.html'); foreach ($html->find('a') as $e) { //used a tag here, but use whatever you want $e->getAllAttributes(); //testing that it worked print_r($e->attr); }
Проверьте этот код
<?php $html = file_get_html('somefile.html'); foreach ($html->find('a') as $e) { $filter = $e->getAttribute('data-filter-string'); } ?>