【问题标题】:DOM How do I find links in class? [duplicate]DOM 我如何在课堂上找到链接? [复制]
【发布时间】:2015-10-31 16:10:44
【问题描述】:

HTML

<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),但我仍然不明白如何使它工作。

【问题讨论】:

  • 你的最后一段看起来很像stackoverflow.com/q/20728839/1301076中的那个我建议你看看那里的答案
  • 你做了什么调试?尝试查看$div$link 包含的内容以帮助您理解。您可以使用 print_r() 通过各种 IDE 打印出对象或调试器。
  • 对提供的答案有疑问或问题?如果解决了问题,请标记为已接受; meta.stackexchange.com/questions/5234/….

标签: php dom


【解决方案1】:

问题 1 是您没有使用错误报告/检查错误日志。错误报告/日志会告诉你:

致命错误:调用未定义的方法 DOMDocument::getElementByClass()

所以getElementByClass 不是 DOMDocument 的函数。您可以遍历所有divs,检查它们是否有您要查找的类,然后解析这些链接。

$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2019-07-03
    相关资源
    最近更新 更多