2011-06-04 46 views
7

我有一個返回saveHTML()類的函數。在類saveHTML()中回覆多個函數後,它會重複某些HTML。我最初通過saveHTML($ node)解決了這個問題,但現在看起來並不是一種選擇。

我不知道saveHTML($ domnode)僅在PHP 5.3.6中可用,我無法控制服務器上傳文件,所以現在我必須使它與PHP 5.2兼容。

爲了簡便起見,並且只顯示我的問題,它看起來與此類似:

<?php 

class HTML 
{ 
    private $dom; 

    function __construct($dom) 
    { 
     $this->dom = $dom; 
    } 

    public function create_paragraph() 
    { 
     $p = $this->dom->createElement('p','Text 1.'); 

      $this->dom->appendChild($p); 

     return $this->dom->saveHTML(); 
    } 

    public function create_paragraph2() 
    { 
     $p = $this->dom->createElement('p','Text 2.'); 

      $this->dom->appendChild($p); 

     return $this->dom->saveHTML(); 
    } 
} 

$dom = new DOMDocument; 
$html = new HTML($dom); 

?> 
<html> 
<body> 
<?php 

echo $html->create_paragraph(); 

echo $html->create_paragraph2(); 

?> 
</body> 
</html> 

輸出:

<html> 
<body> 
<p>Text 1.</p> 
<p>Text 1.</p><p>Text 2.</p> 
</body> 

我有一個想法,爲什麼它的發生,但我不知道如果不使用saveHTML($ domnode)就不重複。我如何使它在PHP 5.2中正常工作?

這裏是什麼,我希望能夠做一個例子:

http://codepad.viper-7.com/o61DdJ

+1

, 'DOMDocument'可能是j的錯誤工具OB。如果你想驗證輸出,你可以使用XMLWriter。 XMLWriter在5.2中可用。見http://www.php.net/manual/en/book.xmlwriter.php – jmz 2011-06-04 15:58:15

回答

10

我做什麼,只是保存節點XML。有在語法有一些差別,但它是足夠好對於大多數的用途:

return $dom->saveXml($node); 
+0

正是我需要的。謝謝:) – Tek 2011-06-04 16:47:44

+0

請注意,在某些情況下,您可能需要添加LIBXML_NOEMPTYTAG標誌: '$ dom-> saveXml($ node,LIBXML_NOEMPTYTAG)' – SingLow 2013-07-03 20:14:07

0

你在你們班有return $this->dom->saveHTML();兩次(據我知道你沒有返回它的類內在任何地方,除非它是一個私有函數。

如果你把return $this->dom->saveHTML();createparagraph()它將echo沒有回來。這是一個DOM的事情,據我知道,但是是新來這個喜歡你的。根據你的榜樣