Получить элемент 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" ), тогда дайте мне "яблоко, апельсин, манго".
Кто-нибудь может указать мне в правильном направлении?
Спасибо.
Ответы
Ответ 1
Просто 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
.
Ответ 2
используйте 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) {
// ...
}
См. эту демонстрацию.
Ответ 3
Сделайте два массива
$fruits=array();
$animals=array();
т
и в цикле, когда вы получите.
if(target=='fruit') {
array_push($fruits,$valueofelement);
} else if ($target=='animal') {
array_push($animals,$valueofelement);
}