段落文本的Dom元素

时间:2010-12-19 05:32:27

标签: php

我正在制作网络刮刀,这让我发疯了!

我需要获取段落的文本。简单吧?!这是代码。

$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,然后一旦你拥有了节点,你就可以获得win的textContent。谢谢大家!不确定它是否适用于其他人的情况,但它肯定是我的。 = O

2 个答案:

答案 0 :(得分:4)

使用 getElementsByTagName 检索所有<p> - 元素。然后迭代生成的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/>';
  }
?>

答案 1 :(得分:-1)

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

(文档)$。就绪(函数(){

          $('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);
             });


        });

/ ** END ** /