問題

私は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

  ベストアンサー

私がしていることは、ノードをXMLとして保存することです。構文にはいくつかの違いがありますが、ほとんどの場合には十分です。

 return $dom->saveXml($node);
 

  同じタグがついた質問を見る

phpdom