简体   繁体   English

如何使用Simple HTML DOM模仿子选择器?

[英]How to imitate child selector with Simple HTML DOM?

Fellas! 伙计们!

I have one nasty page to parse but can't figure out how to extract correct data blocks from it using Simple HTML DOM , because it has no CSS child selector support. 我有一个讨厌的页面要解析,但无法弄清楚如何使用简单的HTML DOM从中提取正确的数据块,因为它没有CSS子选择器支持。

HTML: HTML:

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

How would I extract (direct) child li elements of parent ul.ul-block ? 我如何提取(直接)父ul.ul-blockli元素?

The $node->find('ul[class=ul-block] > li'); $node->find('ul[class=ul-block] > li'); doesn't work and $node->find('ul[class=ul-block] li'); 不起作用和$node->find('ul[class=ul-block] li'); ofc finds also nested descandant li elements :( ofc还发现了嵌套的descandant li元素:(

I had the same issue, and used the children method to grab just the first level items. 我有同样的问题,并使用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>

And here's the Simple HTML Dom code to get just the first level li items: 这里是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 ...
}

Simple example with php DOM : 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 />';
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM