2011-06-04 45 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的事情,据我知道,但是是新来这个喜欢你的。根据你的榜样