2010-12-19 85 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