我正在使用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>";
}
我希望有人可以提供帮助。
答案 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>";
}
}