Простой HTML DOM, получающий все атрибуты из тега

Сортируйте вопрос из двух частей, но, возможно, ответьте на другой вопрос. Я пытаюсь получить часть информации из

<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.

благодаря

Solutions Collecting From Web of "Простой HTML DOM, получающий все атрибуты из тега"

Чтобы захватить все эти атрибуты, вы должны прежде чем исследовать анализируемый элемент, например:

 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'); } ?>