2015-10-31 56 views
0

HTMLDOM如何在課堂上找到鏈接?

<div class="imgw"> 
    <ul> 
     <li> 
      <a href="http://somesites/index.html"> 
       <img src="http://somesites.com/picture.jpg"/> 
      </a> 
     </li> 
    </ul> 
</div> 

PHP

$dom = new DOMDocument(); 
$dom->loadHTML($html); 
$div = $dom->getElementByClass('imgw'); 
$links = $div->getElementsByTagName('a'); 
foreach ($links as $link) { 
    $li = $link->getAttribute('href'); 
    echo ($li."<br>"); 
} 

我一直在尋找這個(PHP DOMDocument),但我還是不明白如何使其發揮作用。

+3

你的最後一段看起來很像一個在http://stackoverflow.com/q/20728839/1301076我建議你看一下回答那裏 – rjdown

+1

你做了什麼調試?試着看看'$ div'和'$ link'包含什麼來幫助你理解。您可以使用print_r()通過各種IDE打印出對象或調試器。 – Devon

+0

提供答案的問題或解答?如果解決了問題,請標記爲已接受; http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work。 – chris85

回答

0

問題1是您沒有使用錯誤報告/檢查錯誤日誌。錯誤報告/日誌會告訴你:

Fatal error: Call to undefined method DOMDocument::getElementByClass()

所以getElementByClass不是DOM文檔的功能。你可以迭代所有的div,檢查他們是否有你正在尋找的類,然後如果通過這些鏈接解析。

$html = '<div class="imgw"> 
     <ul> 
         <li > 
          <a href="http://somesites/index.html"> 
           <img src="http://somesites.com/picture.jpg"/> 
          </a> 


         </li> 
        </ul> 


      </div>'; 
$dom = new DOMDocument(); 
$dom->loadHTML($html); 
$divs = $dom->getElementsByTagName('div'); 
foreach ($divs as $div){ 
    if(preg_match('/\bimgw\b/', $div->getAttribute('class'))) { 
     $links = $div->getElementsByTagName('a'); 
     foreach($links as $link){ 
       $li = $link->getAttribute('href'); 
       echo ($li."<br>"); 
     } 
    } 
} 

輸出:

http://somesites/index.html<br> 

演示:https://eval.in/460741