2010-12-19 79 views
0

我正在制作网络刮板,这让我疯狂!段落文本的Dom元素

我需要得到一段文字。简单吧?!这是代码。

$xpath = new DOMXPath($dom); 
$hrefs = $xpath->evaluate("/html/body//div"); 

for ($i = 0; $i < $hrefs->length; $i++) { 
$href = $hrefs->item($i); 
$url = $href->getAttribute('class'); 
echo "<br />Found it: $url"; 
} 

它完美地工作,抓住页面上每个div的类并回应出来。但我真正需要做的是找到所有<p>标签 - 页面上的每一个标签 - 并回显<p>之间的文本!我有一种感觉很简单,但我无法弄清楚。

编辑

时采取了以下内容:

$doc = new DOMDocument(); 
@$doc->loadHTML($html); 
$node = $doc->getElementsByTagName('p')->item(3); 
echo $node->textContent."\n"; 

你真正想要的是getElementsByName,然后一旦你有节点,你的textContent为胜。谢谢你们!不知道它是否会适用于其他人的情况,但它确实是我的。 = o

回答

4

使用getElementsByTagName检索所有<p> -elements。然后迭代结果DOMNodeList,获取项目的nodeValue

<?php 
    $dom=new DOMDocument; 
    $dom->loadXML('<html><body><p>para1<p>para2<p>para3</p></p></p></body></html>'); 
    $paras=$dom->getElementsByTagName('p'); 

    for($p=0;$p<$paras->length;++$p) 
    { 
    echo htmlentities($paras->item($p)->nodeValue).'<hr/>'; 
    } 
?> 
+0

那么你肯定我指出了正确的方向!非常感谢!我已经更新了示例。 – 2010-12-19 16:34:08

-1

这个jQuery代码片段可能会有帮助。点击textarea后,它会查找p元素 中的所有内容并将它们加载到textarea中。

  $('textarea').click(function(){ 
      var pText = $('p').text(); 
      if($('p').children('a, span, li')) 
      { 
       var aText = $('a').text(); 
       var spanText=$('span').text(); 
       var liText= $('li').text(); 
      } 
      //alert('the value p is ' + pText +''+ spanText+''+liText); 
        $(this).text(pText+''+ spanText+''+liText); 
      }); 


     }); 

/** /** ** BEGIN/

$(文件)。就绪(函数(){END **/

+1

这未标记为jQuery – 2010-12-19 09:31:21