Перебрать элементы ‹div› с помощью PHP

У меня есть блок html в строке, которая в основном представляет собой список div... Каждый div имеет html внутри, который я хочу анализировать отдельно.

У меня возникли проблемы с выяснением того, как именно перебрать начальные элементы div.

Кто-нибудь может помочь?

Пример html:

<div><!-- stuff in here --></div>
<div><!-- stuff in here --></div>
<div><!-- stuff in here --></div>
<div><!-- stuff in here --></div>

В этом примере я ожидаю, что окончательный код будет циклически повторяться 4 раза и предоставит мне содержимое каждого div.


person Chris    schedule 18.01.2010    source источник
comment
Если вы часто делаете подобные вещи, я предлагаю вам взглянуть на phpQuery code.google.com/p/ phpзапрос   -  person pixeline    schedule 19.01.2010


Ответы (2)


Это должно работать (если HTML находится во внешнем файле):

$doc = new DOMDocument();
$doc->loadHTMLFile('test.html');
$divs = $doc->getElementsByTagName('div');
foreach($divs as $n) {
    echo $n->nodeValue;
}

И в случае строки, содержащей HTML, вы можете сделать:

$doc = new DOMDocument();
$doc->loadHTML('<html><body><div>A</div><div>B</div><div>C</div><div>D</div></body></html>');
$divs = $doc->getElementsByTagName('div');
foreach($divs as $n) {
  echo $n->nodeValue . "\n";
}

который будет производить:

A
B
C
D
person John Conde    schedule 18.01.2010
comment
При этом вам просто нужно быть осторожным с div внутри ваших div. Они также будут повторяться. - person Eric Mickelsen; 19.01.2010
comment
Это внешний файл, я уже выделил нужный раздел с помощью strpos и substr, могу ли я сделать это на фрагменте HTML? - person Chris; 19.01.2010
comment
Джон, я немного добавил к твоему ответу. Обычно я бы добавил это как комментарий к вашему ответу, но, поскольку он был более или менее таким же, как то, на что вы сами уже ответили, я сразу же отредактировал его. Конечно, если вы возражаете, не стесняйтесь удалить его. - person Bart Kiers; 19.01.2010
comment
Могу ли я сделать это нетерпимым к ошибкам? Я мог бы вставить (извне) html, который я пытаюсь разобрать? - person Chris; 19.01.2010
comment
@Bart K., дополнения и улучшения всегда приветствуются. :) @Chris, вы можете добавить к этому проверку ошибок, убедившись, что это на самом деле HTML в строке / файле, который нужно проверить. Вы также можете добавить HTML прямо в метод loadHTML, как показано в примере Барта. - person John Conde; 19.01.2010

Если это XHTML, вы можете использовать SimpleXML:

$xml = simplexml_load_string($xhtmlstring);
foreach ($xml->div as $d) {
   {
   //parsing
   }
}
person Eric Mickelsen    schedule 18.01.2010
comment
Я пробовал простой xml, но, к сожалению, он не загружается, я не знаю, почему! - person Chris; 19.01.2010
comment
Попробуйте это для вывода ошибок xml: libxml_use_internal_errors(true); $sxe = simplexml_load_string(‹?xml version='1.0'›‹сломанный›‹xml›‹/сломанный›); if (!$sxe) { echo Не удалось загрузить XML\n; foreach(libxml_get_errors() as $error) { echo \t, $error-›message; } } - person Eric Mickelsen; 19.01.2010