它應該是簡單$html->find('div.right > text')
,但不會工作,因爲簡單的HTML DOM解析器似乎並不支持嫡系查詢。
因此,您必須首先找到所有<div>
元素並搜索子節點以查找文本節點。不幸的是,->childNodes()
方法映射到->children()
,因此只返回元素。
一個工作解決方案是在每個<div>
元素上調用->find('text')
,然後根據父節點過濾結果。
foreach ($doc->find('div.right') as $parent) {
foreach ($parent->find('text') as $node) {
if ($node->parent() === $parent && strlen($t = trim($node->plaintext))) {
echo $t, PHP_EOL;
}
}
}
使用DOMDocument
,這個XPath表達式會做同樣的工作,而不痛:
$doc = new DOMDocument;
$doc->loadHTML($content);
$xp = new DOMXPath($doc);
foreach ($xp->query('//div/text()') as $node) {
if (strlen($t = trim($node->textContent))) {
echo $t, PHP_EOL;
}
}
確實沒有嘗試過任何的代碼? – 2013-04-11 06:38:26
你想得到或想要在div中插入? – liyakat 2013-04-11 06:40:37
你能發佈2個更多div元素嗎?或者是否重複發佈div元素? – 2013-04-11 06:45:50