получить элемент HTML по значению атрибута в php

Мне нужно извлечь некоторые данные с веб-страницы с помощью php. Часть, которая меня интересует, структурирована аналогично этому:

<a href="somepath" target="fruit">apple</a> <a href="somepath" target="animal">cat</a> <a href="somepath" target="fruit">orange</a> <a href="somepath" target="animal">dog</a> <a href="somepath" target="fruit">mango</a> <a href="somepath" target="animal">monkey</a> 

Во-первых, я хочу извлечь все фрукты, а затем всех животных, чтобы у меня их было хорошо сгруппировано.

Я выяснил, как перебирать все значения атрибутов. Вот код:

 $dom = new DOMDocument(); $html = file_get_contents('example.html'); @$dom->loadHTML($html); $a = $dom->getElementsByTagName('a'); for ($i; $i < $a->length; $i++) { $attr = $a->item($i)->getAttribute('target'); echo $attr . "\n"; } 

Поэтому я получаю:

 fruit animal fruit animal fruit animal 

Я также узнал, как получить текстовое содержимое элементов:

 $a->item($i)->textContent 

Итак, если включить в цикл и повторить эхо, я получаю:

 apple cat orange dog mango monkey 

Я чувствую, что я очень близко, но я не могу получить то, что хочу. Мне нужно что-то вроде этого:

if (target = "fruit"), тогда дайте мне «яблоко, апельсин, манго».

Может ли кто-нибудь указать мне в правильном направлении?

Благодарю.

Solutions Collecting From Web of "получить элемент HTML по значению атрибута в php"

Просто continue target атрибуты, которые не являются fruit , а затем добавьте textContent элементов в массив.

 $nodes = array(); for ($i; $i < $a->length; $i++) { $attr = $a->item($i)->getAttribute('target'); if ($attr != 'fruit') { continue; } $nodes[] = $a->item($i)->textContent; } 

$nodes теперь содержит все узлы элементов, у которых их target атрибут установлен в fruit .

используйте DOMXPath и запросы:

 $doc = new DOMDocument(); $doc->Load('yourFile.html'); $xpath = new DOMXPath($doc); $fruits = $xpath->query("//a[@target='fruit']"); foreach($fruits as $fruit) { // ... } $animals = $xpath->query("//a[@target='animal']"); foreach($animals as $animal) { // ... } 

См. Эту демонстрацию.

Сделайте два массива

 $fruits=array(); $animals=array(); 

t и в цикле, когда вы получите.

 if(target=='fruit') { array_push($fruits,$valueofelement); } else if ($target=='animal') { array_push($animals,$valueofelement); }