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

标签 php html xpath domdocument

这里我有一个非常简单的代码来获取类名为“info_block”的所有“div”元素。我想知道如何从“info_block”中找到另一个具有类名“price”的元素并显示它而不是整个“info_block”元素。 主要目标:查找类名“info_block”的每个元素的价格。但在 foreach 内部执行,因为我可能需要查找其他元素。

<?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); 
}
?>

每个“info_block”中都有一个类名为“price”的元素,我只想显示该元素。就像这样...

   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);
   }

但它不像以前那样只给我价格,而是返回“info_block”的整个 HTML。

最佳答案

您可以提供每个 <div class="info_block">找到并搜索<div class="price">"通过在 ->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);
}

注意:您不需要创建 DOM 的另一个实例和DOMXpath .

此示例被考虑到这种 HTML 语义的上下文中:

<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>

关于php - 如何在已解析的 HTML 数据中查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39866973/

相关文章:

php - 如何在 yii 框架中创建主题?

javascript - jquery 函数根据第二个 jquery 函数选择的值创建表

java - Jooby Web服务器总是抛出错误 "406 Not acceptable: text/html"

c# - 如何在 Xpath 中传递动态值

java - 使用 Java 进行条件 XML 解析

php - 何时将 Where 子句和 ON 子句与 Join mysql 查询一起使用?

php - 如何在javascript中修改php字符串变量

javascript - 顶部滚动条不可见

javascript - 如何更改 json 结构使其看起来像另一个 json 结构

python 2.5.1 和支持的 xpath 版本