【问题标题】:DOMDocument::saveHTML($domnode) in PHP 5.2?PHP 5.2 中的 DOMDocument::saveHTML($domnode)?
【发布时间】:2011-09-08 09:45:58
【问题描述】:

我在一个类中有几个返回 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

【问题讨论】:

  • 根据您的示例,DOMDocument 可能是该工作的错误工具。如果您想要经过验证的输出,可以使用 XMLWriter。 XMLWriter 在 5.2 中可用。见php.net/manual/en/book.xmlwriter.php

标签: php dom


【解决方案1】:

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

return $dom->saveXml($node);

【讨论】:

  • 正是我所需要的。谢谢:)
  • 请注意,在某些情况下您可能需要添加 LIBXML_NOEMPTYTAG 标志:$dom-&gt;saveXml($node, LIBXML_NOEMPTYTAG)
【解决方案2】:

您的班级中有两次return $this-&gt;dom-&gt;saveHTML();(据我所知,除非它是私有函数,否则您不必在班级中的任何地方返回它。

如果您将return $this-&gt;dom-&gt;saveHTML();createparagraph() 中取出,它将在echo 中返回而不会返回。据我所知,这是一个 DOM 的东西,但像你一样是新手。

【讨论】:

    猜你喜欢
    • 2021-03-09
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2013-06-23
    • 2013-07-29
    相关资源
    最近更新 更多