以下domdocument()调用的结果
$html = <<<EOT
<div class="list_item">
<div class="list_item_content">
<div class="list_item_title">
<a href="/link/goes/here">
INFO<br />
<span class="part2">More Info</span><br />
<span class="part3">Etc.</span>
</a>
</div>
</div>
EOT;
libxml_use_internal_errors(false);
$dom = new DOMDocument();
$dom->loadhtml($html);
$xpath = new DOMXPath($dom);
$titles_nodeList = $xpath->query('//div[@class="list_item"]/div[@class="list_item_content"]/div[@class="list_item_title"]/a');
foreach ($titles_nodeList as $title) {
$titles[] = $title->nodeValue;
}
echo("<pre>");
print_r($titles);
echo("</pre>");
?>
是
Array
(
[0] =>
INFOMore InfoEtc.
)
当我没有在路径中指定这些跨度时,为什么结果中包含这两个跨度中的数据?我只对直接检索a元素中包含的数据感兴趣,而不是对元素内部的spans中包含的信息感兴趣。我想知道我做错了什么。
答案 0 :(得分:1)
节点在那里,但是在浏览器中以HTML模式查看它们。尝试查看页面源,和/或执行:
echo("<pre>");
htmlspecialchars(print_r($titles), true);
echo("</pre>");
相反,它会将<>
编码为<>
并使其“可见”。
答案 1 :(得分:1)
试试这个xpath:
//div[@class="list_item"]/div[@class="list_item_content"]/div[@class="list_item_title"]/a/child::text()