PHP 5.2中的DOMDocument :: saveHTML($ domnode)?

时间:2011-06-04 14:48:28

标签: php dom

我在一个返回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

2 个答案:

答案 0 :(得分:10)

我所做的只是将节点保存为XML。语法有一些差异,但对于大多数用途来说足够好

return $dom->saveXml($node);

答案 1 :(得分:0)

你班上有return $this->dom->saveHTML();两次(据我所知,除非是私人功能,否则你不必将它归到班级里面。

如果您从return $this->dom->saveHTML();中取出createparagraph(),则会echo而不返回。据我所知,它是一个DOM的东西,但对你来说这是个新手。