0

我正在尝试使用 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 元素,这应该留下文本。但我希望有一个更优雅的方法:)

谢谢

安迪

4

2 回答 2

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,您将不得不手动执行类似的过程,即从元素的克隆版本中删除子元素,然后获取内部文本。

于 2011-05-19T12:22:04.990 回答
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 使其更具体。

我在您的示例中测试了上面的代码并且它有效。

于 2011-05-19T12:27:11.087 回答