Как имитировать дочерний селектор с помощью простого HTML DOM?

Fellas!

У меня есть одна неприятная страница для синтаксического анализа, но не могу понять, как извлечь из нее правильные блоки данных, используя Simple 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 находит также вложенные элементы descandant li 🙁

Простой пример с 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 />'; } 

У меня была такая же проблема, и я использовал метод 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 ... }