我尝试使用PHP的DOMDocument检索节点的值时遇到了麻烦。如果需要节点有一些子节点 - 节点值也将包含它们的内容。
示例:我有一个包含以下内容的HTML文档:
<div>
small
<div id="main_div">
Main div with a huge content in it
<div>Subdiv 1</div>
<div>Subdiv 2</div>
<div>Subdiv 3</div>
Tail of the main div
</div>
</div>
以下PHP脚本:
$site = new DOMDocument();
$site->loadHTML($content);
$divs = $site->getElementsByTagName('div');
foreach($divs as $div){
echo $div->textContent;
echo "<br>";
}
如果我尝试获取节点标识main_div
,则其nodeValue将等于:
Main div with a huge content in it Subdiv 1 Subdiv 2 Subdiv 3 Tail of the main div
我是否只能检索“主要div中包含大量内容的主要内容”(main_div
没有孩子的内容)?
我已经阅读了问题'Getting content of the node having childs via DOMDocument'但是接受的答案让我得到了相同的结果:节点正在输出他们孩子的内容。
答案 0 :(得分:2)
每个div
元素内部都是包含实际文本的DOMText节点。不使用$div->textContent
,而是收集每个子文本节点的nodeValues:
foreach($divs as $div){
$text = array();
foreach ($div->childNodes as $childNode) {
if ($childNode->nodeType === XML_TEXT_NODE && $childNode->nodeValue) {
$text[] = trim($childNode->nodeValue);
}
}
if ($text) {
print implode(' ', $text) . '<br>';
}
}