使用简单的HTML Dom过滤

时间:2014-02-12 09:35:08

标签: html dom simple-html-dom

我正在使用SimpleHTMLDom(http://simplehtmldom.sourceforge.net/manual.htm)来解析一个html页面,在这个页面上有两种类型的< li>我想要抓住的元素

<li class="g">SOME TEXT & LINKS HERE</li>

and 

<li class="g no-sep">SOME TEXT & LINKS HERE</li>

有没有办法可以使用html dom完成此操作,目前我正在使用以下代码来获取两个不同的li,但是有一个交叉。

foreach($html->find('li.g h3 a') as $ul) 
{
             echo $ul->href."<br>";
}

foreach($html->find('li.no-sep h3 a') as $ul) 
{
             echo $ul->href."<br>";
}

我希望有人可以提供帮助。

2 个答案:

答案 0 :(得分:0)

这会抓取所有<li> .g class = <li class="g"><li class="g no-sep>

foreach($html->find('li.g h3 a') as $ul) 
{
             echo $ul->href."<br>";
}

这将只抓取那些同时具有 .g AND .no-sep 类的<li> = <li class="g no-sep"> < / p>

foreach($html->find('li.g.no-sep h3 a') as $ul)
{
             echo $ul->href."<br>";
}

<强>更新 这将使用 .g 类获取所有<li>,但跳过那些也包含 .no-sep 类的文件

foreach($html->find('.g') as $li) {
    if (!str_get_html($li)->find('.no-sep')) echo $li;
}

答案 1 :(得分:0)

根据文档,您可以使用Attribute Filters ...在您的情况下,请尝试:

foreach($html->find('li[class!=no-sep] h3 a') as $ul) {
    echo $ul->href."<br>";
}

如果它不起作用(simple_html_dom在过滤方面存在严重问题!),那么您可以使用以下条件:

foreach( $html->find('li.g') as $i=>$ul ) {
    if (strpos($ul->class,'no-sep') === false) {
        echo $ul->href."<br>";
    }
}