获取div中的内容但跳过div中的<span> simple_html_dom </span>

时间:2014-03-28 19:12:57

标签: php html simple-html-dom plaintext

所以我有一个div类内部的代码,在div类中有一个文本和一个带有另一个文本的span,所以我需要获取内容,但不是内部跨度和跨度。

基本上这是代码

<div class="somecontent">
    23:45
    <span>Tags:
      <a href="link to somewhere"> tag1</a>
      <a href="link to somewhere"> tag1</a>
      <a href="link to somewhere"> tag1</a>
    </span>
</div>

所以我不需要内部跨度和那些链接。我只需要这个

23:45

基本上我只需要获取视频的时间。

我用simple_html_dom抓取页面,那么如果有人知道,我的解决方案是什么?

3 个答案:

答案 0 :(得分:1)

您正在寻找:

$html->find('.somecontent text', 0);

答案 1 :(得分:0)

您可以执行以下操作:

$doc = str_get_html($html);

foreach ($doc->find('div.somecontent') as $parent) {
    foreach ($parent->find('text') as $node) {
        if ($node->parent() === $parent) {
            echo trim($node->plaintext);
        }
    }
}

如果您使用PHP的内置DOMDocument类,这会变得更容易。您只需使用XPath表达式来检索所需的文本:

$doc = new DOMDocument;
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);

foreach ($xpath->query('//div/text()') as $node) {
    echo trim($node->textContent);
}

XPath表达式//div/text()查找<div>内的所有文本节点。

答案 2 :(得分:0)

这对我来说是一种解决方案。

首先我得到span中的所有文本,而不是使用str_replace来获取somecontent类中的所有文本,并将内部的一个替换为空。

                $get_duration = $video->find('div[class="somecontent"]', 0)->children(0);
                $video_duration = str_replace($get_duration, '', $video->find('div[class="somecontent"]', 0)->innertext);