我正在尝试使用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元素,这应该留下文本。但我希望有更优雅的方法:)
由于
安迪
答案 0 :(得分:3)
如果我正确地阅读了您的问题,您希望获取该元素的文本,但不包括子元素的文本。
使用JavaScript,这里有一个解决方案:
http://www.stevefenton.co.uk/Content/Blog/Date/201007/Blog/Jquery-Get-Text-While-Excluding-Children/
总而言之,你会这样做......
$("#mydiv").clone().children().remove().end().text();
在PHP中(使用phpquery),这将是......
$phpqueryObj = phpQuery::newDocument(DOMinnerHTML($INNERHTMLOFYOURDOMELEMENT));
$text = $phpqueryObj->clone()->children()->remove()->end()->text();
如果没有jQuery / JavaScript,您必须手动执行类似的过程,即从元素的克隆版本中删除子元素,然后获取内部文本。
答案 1 :(得分:1)
最简单的方法可能是在给定上下文节点的情况下使用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";
}
}
请注意,第一个查询将返回所有 div,因此您必须使其更适合您想要的div。
我在您的示例中测试了上面的代码并且它可以正常工作。