2011-08-28 36 views
3
<blockquote> 
<p> 
    2 1/2 cups sweet cherries, pitted<br> 
    1 tablespoon cornstarch <br> 
    1/4 cup fine-grain natural cane sugar 
</p> 
</blockquote> 

嗨,我想獲得'p'標籤內的文字。你會發現有三條不同的線,我想在每行添加一些額外的文本後分別打印它們。這裏是我的代碼塊DOMDocument:如何將內部HTML作爲字符串通過換行符分隔?

$tags = $dom->getElementsByTagName('blockquote'); 
    foreach($tags as $tag) 
    { 
     $datas = $tag->getElementsByTagName('p'); 
     foreach($datas as $data) 
     { 
      $line = $data->nodeValue; 
      echo $line; 
     } 
    } 

主要問題是$ line包含'p'標籤內包含'br'標籤的全文。我怎麼能分開三條線來分別對待它們?

在此先感謝。

+0

與以前的標題中的innerHTML refrence相關:[PHP的DomDocument中的innerHTML?](http://stackoverflow.com/q/2087103/367456) – hakre

回答

2

你可以做到這一點的XPath。你所要做的就是查詢文本節點。無需爆炸或類似的東西:

$dom = new DOMDocument; 
$dom->loadHtml($html); 
$xp = new DOMXPath($dom); 
foreach ($xp->query('/html/body/blockquote/p/text()') as $textNode) { 
    echo "\n<li>", trim($textNode->textContent); 
} 

非XPath的替代方法是迭代p標籤,只輸出他們的孩子時,他們一個DOMText節點:

$dom = new DOMDocument; 
$dom->loadHtml($html); 
foreach ($dom->getElementsByTagName('p')->item(0)->childNodes as $pChild) { 
    if ($pChild->nodeType === XML_TEXT_NODE) { 
     echo "\n<li>", trim($pChild->textContent); 
    } 
} 

既會輸出(demo

<li>2 1/2 cups sweet cherries, pitted 
<li>1 tablespoon cornstarch 
<li>1/4 cup fine-grain natural cane sugar 

另見DOMDocument in php爲節點概念的說明。瞭解何時使用DOM是至關重要的。

+0

我試圖訪問此鏈接[鏈接](http:/ /使用此代碼[鏈接](http://codepad.viper-7.com/9eEEkZ) 但它不起作用。 你會請檢查嗎? – qmaruf

+0

@qmaruf在我的例子中,XPath是直接路徑到第一個文本節點,它是p元素的直接子元素,它是body元素的直接子元素的blockquote元素的直接子元素。您必須爲您的網站進行調整。見http://codepad.viper-7.com/xk4H4S – Gordon

+0

謝謝...我已經調整是。這是從螢火蟲發現的xpath: /html/body/div/div [3]/div/div [3]/blockquote/p [2]/text() – qmaruf

1

您可以使用

$lines = explode('<br>', $data->nodeValue); 
0

這裏是JavaScript語法

var tempArray = $line.split("<br>"); 

echo $line[0] 
echo $line[1] 
echo $line[2] 
-1

您可以使用PHP explode功能這樣一個解決方案。 (假設你的<p>標籤中的每個符合<br>結束)

$tags = $dom->getElementsByTagName('blockquote'); 
foreach($tags as $tag) 
{ 
    $datas = $tag->getElementsByTagName('p'); 
    foreach($datas as $data) 
    { 
     $contents = $data->nodeValue; 
     $lines = explode('<br>',$contents); 
     foreach($lines as $line) { 
      echo $line; 
     } 
    } 
} 
相關問題