doupafu6980 2016-10-05 06:37
浏览 134
已采纳

如何在已解析的HTML数据中查找元素

Here I have a very simple code to grab all the 'div' elements with the classname 'info_block'. I am wondering how would I go about finding another element with the classname 'price' from within 'info_block' and display it instead of the whole 'info_block' element. Main Goal: Find the price in each element with classname 'info_block'. but do inside the foreach, because I may need to find other elements.

<?php
$page = file_get_contents('example.com');
$dom = new DOMDocument();
$dom->loadHTML($page);
$xpath = new DOMXPath($dom); 
$div1 = $xpath->query('//div[@class="info_block"]'); 
foreach ($div1 as $var1){
//echo $dom->saveHTML($var1); 
}
?>

There is a element in each of the 'info_block' with a classname 'price' and I would like to display only that element. Like so...

   foreach ($div1 as $var1){ 
          $dom2 = new DOMDocument();
          $dom2->loadHTML($dom->saveHTML($var1));
          $xpath2 = new DOMXPath($dom2); 
          $div2 = $xpath2->query('//div[@class="price"]'); 
          $div2 = $div2->item(0);
    echo $dom2->saveHTML($div2);
   }

But instead of just giving me the price it returns the whole HTML for 'info_block' as it did before.

  • 写回答

3条回答 默认 最新

  • dsceme82487 2016-10-05 06:44
    关注

    You could provide each <div class="info_block"> found and search for <div class="price">" by providing it in the second argument of ->query():

    $div1 = $xpath->query('//div[@class="info_block"]'); 
    foreach ($div1 as $var1){ 
        $div2 = $xpath->query('./div[@class="price"]', $var1); 
                                                 //     ^ each div
        $div2 = $div2->item(0);
        echo $dom->saveHTML($div2);
    }
    

    Note: You do not need to create another instance of DOM and DOMXpath.

    This example is taken into context of this kind of HTML semantic:

    <div class="info_block"> // each info block
        <div class="price">1</div> // inside of it has price
    </div>
    <div class="info_block">
        <div class="price">2</div>
    </div>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题