2012-08-24 99 views
1

我想檢索某個標籤中的html代碼。我知道DomDocument能夠做到這一點。但是,如果我想提取沒有外部標籤的內容,怎麼能實現?在PHP中沒有外標籤的某個標籤中提取Html內容

例如,

$html = '<div><span>Hello world!</span><br><p>some other text</p></div>';  
$doc = new DOMDocument; 
$doc->loadHTML($html); 
echo $doc->saveXML($doc->getElementsByTagName('div')->item(0)); 

這將輸出,

<div> 
    <span>Hello world!</span> 
    <br> 
    <p>some other text</p> 
</div> 

我希望它沒有外部div標籤。我嘗試了節點值,但它剝離了所有標籤。

$html = '<div><span>Hello world!</span><br><p>some other text</p></div>';  
$doc = new DOMDocument; 
$doc->loadHTML($html); 
$node = $doc->getElementsByTagName('div')->item(0); 
echo $node->nodeValue; 

任何想法?

+0

什麼你問並沒有真正意義,你問標記及其內容,但你說你不想要的標籤。既然你知道你要求什麼標籤,你可以很簡單地用正則表達式去除它,或者你可以簡單地選擇你想要的標籤,而不必介意有外層標籤。 – deed02392

+0

您正確地得到了問題。這意味着這個問題是有道理的。如果您認爲這很簡單,您可以發佈解決方案嗎? – Teno

+0

我同意它是有道理的,有時我會忘記自己。我已經發布了一個適合你的解決方案。 – deed02392

回答

4

好了,怎麼樣一個PHP的innerHTML實現:

<?php 
$html = '<div><span>Hello world!</span><br><p>some other text</p></div>';  
$doc = new DOMDocument; 
$doc->loadHTML($html); 
$node = $doc->getElementsByTagName('div')->item(0); 
echo DOMinnerHTML($node); 

function DOMinnerHTML($element) 
{ 
    $innerHTML = ""; 
    $children = $element->childNodes; 
    foreach ($children as $child) 
    { 
     $tmp_dom = new DOMDocument(); 
     $tmp_dom->appendChild($tmp_dom->importNode($child, true)); 
     $innerHTML.=trim($tmp_dom->saveHTML()); 
    } 
    return $innerHTML; 
} 
?> 
+0

完美,謝謝。 – Teno

+0

或使用DOMDocumentFragment而不是DOMDocument ... – VolkerK