2014-02-12 43 views
0

我使用SimpleHTMLDom(http://simplehtmldom.sourceforge.net/manual.htm)來解析HTML頁面,此頁面上有兩種類型<李>我要搶過濾用簡單的HTML DOM

<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

這將抓住所有<li> s的.G類= <li class="g"><li class="g no-sep>

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

這會搶只有那些<li> S作類。無九月在.G和同一時間=只有<li class="g no-sep">

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

UPDATE: 這將抓住所有<li> s的.G類,但跳過那些也有一個。無九月

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

感謝您的答覆,這將工作像目前的解決方案,我需要能夠忽略nosep搜索或至少把nosep回到結果 –

+0

@KieranHeadley哦,對不起,誤會了它的時候。看看更新......現在它爲你工作? :) – 2014-02-12 11:24:12

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>"; 
    } 
}