Поддерживает ли Simple HTML Dom: как анализировать?

Я должен разобрать структуру HTML, как это:

<div class='container>
<div class='inner-div'>
<span class='text'>...</span>
<div class='author'>
<span data-author='Alpha'>...</span>
</div>
<div class='summary'>
<span data-summary='Exclusive'>Text 1</span>
</div>
</div>
<div class='inner-div'>
<span class='text'>...</span>
<div class='author'>
<span data-author='Beta'>...</span>
</div>
<div class='summary'>
<span data-summary='Non-Exclusive'>Text 2</span>
</div>
</div>
<div class='inner-div'>
<span class='text'>...</span>
<div class='author'>
<span data-author='Gamma'>...</span>
</div>
<div class='summary'>
<span data-summary='Exclusive'>Text 3</span>
</div>
</div>
<div class='inner-div'>
<span class='text'>...</span>
<div class='author'>
<span data-author='Delta'>...</span>
</div>
<div class='summary'>
<span data-summary='Non-Exclusive'>Text 4</span>
</div>
</div>
...
<div class='inner-div'>
<span class='text'>...</span>
<div class='author'>
<span data-author='Zeta'>...</span>
</div>
<div class='summary'>
<span data-summary='Exclusive'>Text 5</span>
</div>
</div>
</div>

Я хочу получить первое «Эксклюзивное» резюме, где автор не «Альфа». В приведенном выше примере это будет «Текст 3». Как я могу разобрать это используя Simple HTML DOM или даже XML DOM?

ДОБАВЛЕНИЕ: Я ищу синтаксический анализ HTML с использованием библиотеки PHP Simple HTML Dom. Я знаю, как разобрать его в jQuery, но библиотека Simple HTML Dom, похоже, не поддерживает какой-либо эквивалент для (: has).

0

Решение

Нет, но вот простая замена HTML, что дом делает (ты хочешь :not вместо :has кстати):

include_once('advanced_html_dom.php');

$html = str_get_html($str);

echo $html->find('.author:not(> [data-author=Alpha]) ~ .summary > [data-summary=Exclusive]', 0);
0

Другие решения

Наконец-то решил это самостоятельно. Для тех, кто ищет решение, вот что я сделал.

$node = $html->find("span[data-summary='Exclusive']",0);
if ($node->parent()->parent()->find('div.author span',0)['data-author'] == 'Alpha') {
$node = $html->find("span[data-summary='Exclusive']",1);
}
return $node->innertext;
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector