这里我有一个非常简单的代码来获取类名为“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/