Вопрос по simple-html-dom, php – А вот код Simple HTML Dom для получения элементов li первого уровня:

2

s!

У меня есть одна неприятная страница для анализа, но я не могу понять, как извлечь из нее правильные блоки данных, используяПростой HTML DOM, потому что он не имеет поддержки дочернего селектора CSS.

HTML:

<ul class="ul-block">
   <li>xxx</li>
   <li>xxx</li>
   <li>
      <ul>
         <li>xxx2</li>
      </ul>
</ul>

Как бы я добыл (прямого) ребенкаli элементы родителяul.ul-block?

$node->find('ul[class=ul-block] > li'); не работает и$node->find('ul[class=ul-block] li'); ofc находит также вложенный дескандантli элементы :(

@ Йоши, эй, я не очень зависим, я использовал его для удаления других сайтов, но я не понимаю, почему я не смог добавить другой парсер. Спасибо за предложение. arma
Вы зависите от использованияПростой HTML DOM? Если нет, посмотрите наSimpleXML или жеphp DOM, В обоих случаях вы можете использовать запросы xpath, с помощью которых можно без проблем выбрать только дочерние элементы. Yoshi

Ваш Ответ

2   ответа
6

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

<ul class="my-list">
    <li>
        <a href="#">Some Text</a>
        <ul>
            <li><a href="#">Some Inner Text</a></li>
            <li><a href="#">Some Inner Text</a></li>
            <li><a href="#">Some Inner Text</a></li>
            <li><a href="#">Some Inner Text</a></li>
        </ul>
    </li>
    <li>
        <a href="#">Some Text</a>
        <ul>
            <li><a href="#">Some Inner Text</a></li>
            <li><a href="#">Some Inner Text</a></li>
            <li><a href="#">Some Inner Text</a></li>
            <li><a href="#">Some Inner Text</a></li>
        </ul>
    </li>
</ul>

А вот код Simple HTML Dom для получения элементов li первого уровня:

$html = file_get_html( $url );
$first_level_items = $html->find( '.my-list', 0)->children();

foreach ( $first_level_items as $item ) {
    ... do stuff ...
}
2

Простой пример сphp DOM:

$dom = new DomDocument;
$dom->loadHtml('
<ul class="ul-block">
   <li>a</li>
   <li>b</li>
   <li>
      <ul>
         <li>c</li>
      </ul>
   </li>
</ul>
');

$xpath = new DomXpath($dom);
foreach ($xpath->query('//ul[@class="ul-block"]/li') as $liNode) {
    echo $liNode->nodeValue, '<br />';
}

Похожие вопросы