我正在使用php DOMXPath解析html页面,并且我试图从类标签中获取与类别信息中的nodeValue对应的nodeValue。
<h3>
<div class="metadata">
<span class="label">Another Label</span>
<span class="info">
<a href="some-link.com">Link Name</a>
</span>
</div>
</h3>
<h3>
<div class="metadata">
<span class="label">Some Label</span>
<span class="info">
<a href="some-link.com">Link Name</a>,
<a href="another-link.com">Another Link Name</a>,
<a href="yet-another-link.com">Yet Another Link Name</a>
</span>
</div>
</h3>
我通过以下方式访问内容:
$label = $xpathLabel->query("//h3/div/span[@class='label']");
$info = $xpathInfo->query("//h3/div/span[@class='info']/a");
并输出:
foreach ($labels as $label) {
print "{$label->nodeValue}\n";
foreach($infos as $info){
print "\t{$info->nodeValue}\n";
}
}
哪个输出:
Another Label
Link Name
Link Name
Another Link Name
Yet Another Link Name
Some Label
Link Name
Link Name
Another Link Name
Yet Another Link Name
为什么会发生这种情况仍然有意义,因为查询是独立的,并且它们的输出都是来自类标签中的所有内容,而另一个内容都是类信息的内容。
是否有更好的方法来进行查询或以更好的方式输出可解决问题的内容?
答案 0 :(得分:0)
您需要使用外部元数据 div作为循环的锚点,然后列出该元素中的标签和信息链接:
$metadata = $xpathLabel->query("//h3/div[@class='metadata']");
foreach ($metadata as $group) {
$labels = $xpathLabel->query("./span[@class='label']", $group);
foreach ($labels as $label) {
print "{$label->nodeValue}\n";
}
$infos = $xpathLabel->query("./span[@class='info']/a", $group);
foreach($infos as $info){
print "\t{$info->nodeValue}\n";
}
}
<div>
元素用作$contextnode
的{{1}}参数,仅搜索当前元素的子元素。
有关完整示例,请参阅https://eval.in/955491