2012-10-16 54 views
16

我有這樣的HTML代碼:如何獲取DOMElement節點的html代碼?

<html> 
    <head> 
    ... 
    </head> 
<body> 
    <div> 
    <div class="foo" data-type="bar"> 
     SOMECONTENTWITHMORETAGS 
    </div> 
    </div> 
</body> 

我已經可以得到此功能的「福」元素(但只有其內容):

private function get_html_from_node($node){ 
    $html = ''; 
    $children = $node->childNodes; 

    foreach ($children as $child) { 
    $tmp_doc = new DOMDocument(); 
    $tmp_doc->appendChild($tmp_doc->importNode($child,true)); 
    $html .= $tmp_doc->saveHTML(); 
    } 
    return $html; 
} 

但我想返回所有的HTML DOMElement的標籤(包括其屬性)。我該怎麼做?

+0

如果您試圖獲取'html_from_node''class =「foo」',那麼您的操作不正確。這樣做有很多簡單的方法。 –

+0

對您有幫助嗎? http://stackoverflow.com/questions/6366351/getting-dom-elements-by-class-name – EricG

+0

@webbandit我知道有一個更好的方法。請給我看! – Xaver

回答

37

使用DOMDocument::saveHTML的可選參數:這表示「僅輸出此元素」。

return $node->ownerDocument->saveHTML($node); 

請注意,參數僅適用於PHP 5.3.6。在此之前,您需要使用DOMDocument::saveXML。結果可能略有不同。另外,如果你已經有了一個對文檔的引用,你可以這樣做:

$doc->saveHTML($node); 
+0

這實際上是我需要的,但它是一個WordPress插件,它應該可以與版本3.4一起使用,並且此版本需要php 5.2.4。 – Xaver

+0

@revaxarts然後使用'saveXML'。輸出將有點不同... – lonesomeday

+0

你指我一個完整的例子?我沒有在函數中引用文檔,只有節點和'DOMDocument :: saveXML($ node)'與'$ node-> saveXML($ node)'不一樣' – Xaver