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 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配