2

伙计们!

我有一个讨厌的页面要解析,但不知道如何使用Simple HTML DOM从中提取正确的数据块,因为它没有 CSS 子选择器支持。

HTML:

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

我将如何提取(直接)liparent 的子元素ul.ul-block

$node->find('ul[class=ul-block] > li');不起作用,ofc$node->find('ul[class=ul-block] li');还发现嵌套的 descandantli元素:(

4

2 回答 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>

这是获取第一级 li 项目的简单 HTML Dom 代码:

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

foreach ( $first_level_items as $item ) {
    ... do stuff ...
}
于 2012-09-03T23:56:20.627 回答
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 />';
}
于 2011-07-26T14:48:28.497 回答