2015-10-31 30 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