在这里,我有一个非常简单的代码来抓住所有' div'具有classname' info_block'的元素。我想知道如何使用类名'价格'来寻找另一个元素?来自' info_block'并显示它而不是整个' info_block'元件。 主要目标:使用classname' 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);
}
?>
每个&#39; info_block&#39;中都有一个元素。使用类名&#39;价格&#39;我想只显示那个元素。像这样......
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);
}
但是,不仅仅是给我价格,它还会返回&#39; info_block&#39;的整个HTML。就像以前一样。
答案 0 :(得分:2)
您可以通过在<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
和<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>
的其他实例。
此示例涉及此类HTML语义的上下文:
SELECT ab.id, ab.name, creditAmt, debitAmt, creditAmt-debitAmt balance FROM ab
JOIN (select sum(credit_amt) creditAmt from pq) i
JOIN (select sum(debit_amt) debitAmt from pq) e
WHERE ab.type = 'user' GROUP BY ab.user_eid
答案 1 :(得分:1)
您可以在XPath中组合查询,以便一次性找到所有需要的元素
$xpath->query('//div[@class="info_block"]|//div[@class="price"]');
答案 2 :(得分:1)
您可以指定用于执行相对XPath查询的dom元素。它在xpath->query
方法
<?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){
$div2 = $xpath2->query('//a[@class="price"]', $var1);
foreach ($div2 as $var2) {
echo $var2->nodeValue. "\n";
}
}
?>
有关详细信息,请参阅此处的xpath文档 xpath query documentation