我正在尝试使用 PHP 提取一些未包含在任何标签中的纯文本。最好的解释方式就是展示;
<div>
<span>Hello</span>
THIS IS THE TEXT I WANT TO EXTRACT
<span>this is some other text</span>
<div><span>pow</span></div>
</div>
我即将尝试的是循环并删除 div 中的所有 dom 元素,并且应该保留文本。但我希望有一种更优雅的方法:)
如果我正确阅读您的问题,您想要获取元素的文本,但不包括子元素的文本。
使用 JavaScript,这里有一个解决方案:
http://www.stevefenton.co.uk/Content/Blog/Date/201007/Blog/Jquery-Get-Text-While-Exclusion-Children/
总而言之,你会这样做......
$("#mydiv").clone().children().remove().end().text();
在 PHP(使用 phpquery)中,这将是...
$phpqueryObj = phpQuery::newDocument(DOMinnerHTML($INNERHTMLOFYOURDOMELEMENT));
$text = $phpqueryObj->clone()->children()->remove()->end()->text();
如果没有 jQuery / JavaScript,您将必须手动执行类似的过程,即从元素的克隆版本中删除子元素,然后获取内部文本。
最简单的方法可能是使用给定上下文节点的 XPath。
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
//find all div nodes
foreach ($xpath->query('//div') as $div) {
//get any immediate child text nodes
foreach ($xpath->query('text()', $div) as $text) {
echo "$text->nodeValue\n";
}
}
请注意,第一个查询将返回 all div,因此您必须针对所需的 div 使其更加具体。
我在您的示例上测试了上面的代码并且它有效。