2014-03-28 41 views
1

所以我有一个代码,这是一个div类的内部和DIV类有一个文本和一个跨度与其他文本,所以我需要得到内容,但不是里面是什么内部跨度和跨度。获取里面的div内容,但跳过<span>该div simple_html_dom内

基本上这是代码

<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 

基本上我只是需要得到的视频时间。

和IM抓住与simple_html_dom所以我的解决办法,如果有人知道什么样的页面?

+0

看看下面这个@pguarianrio回答哪个问题解决了这个问题。 http://stackoverflow.com/questions/22631484/html-dom-parser-get-first-element/22632599#22632599 – Gunaseelan

+0

如果你提供你在哪里刮数据的URL,我们可能会发现,其确切的问题存在? – Gunaseelan

回答

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>内的所有文本节点。

+0

如果你有时候希望你能使用XPath用简单的HTML DOM你可能会喜欢[项目](https://sourceforge.net/projects/advancedhtmldom/) - 它可以让你做的事:'$ doc->找到('// div/text()')' - 我个人比较喜欢css。 – pguardiario

1

您需要的信息:

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

这不起作用。 –

0

这为我工作作为解决方案。

首先我得到的所有文字里面跨度,比我使用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);