PHP DOMDocument - createDocumentFragment 不适用于 loadHTML

Posted

技术标签:

【中文标题】PHP DOMDocument - createDocumentFragment 不适用于 loadHTML【英文标题】:PHP DOMDocument - createDocumentFragment does not work with loadHTML 【发布时间】:2014-03-10 10:30:49 【问题描述】:

我有一个包含 html 的字符串,我想将此 HTML 插入到 DOMElement 中。

为此,我做到了:

$abstract = "<p xmlns:default="http://www.w3.org/1998/Math/MathML">Test string <formula type="inline"><default:math xmlns="http://www.w3.org/1998/Math/MathML"><default:mi>&pi;</default:mi></default:math></formula></p>"

$dom = new \DOMDocument();
@$dom->loadHTML($abstract);     
$frag = $dom->createDocumentFragment();

当 var 转储 $frag-&gt;nodeValue 时,我得到了 null。有什么想法吗?

【问题讨论】:

从该代码中删除 \ 和 @,您将得到答案 @Hanky웃Panky,不,这不会解决问题: \ 是用于 Symfony 框架,能够找到 DomDocument 类,@ 是隐藏警告,因为我有一些非应该加载的常用标签。 \ 用于*** php 命名空间。如果您在命名空间之外(在***命名空间中),则它是可选的。 @ 块错误,但 Math-ML 部分无论如何都坏了。 期望得到什么?无子节点的“价值”是什么? 【参考方案1】:

我不确定您的期望,您创建了一个新片段并且没有添加任何内容。即使你这样做也行不通,因为文档片段不是节点,它是一个辅助构造,用于将 XML 片段添加到文档。

这是一个例子:

$dom = new \DOMDocument();
$body = $dom->appendChild($dom->createElement('body'));

$fragment = $dom->createDocumentFragment();
$fragment->appendXml('<p>first</p>second');

$body->appendChild($fragment);

echo $dom->saveHtml();

输出:

<body><p>first</p>second</body>

【讨论】:

以上是关于PHP DOMDocument - createDocumentFragment 不适用于 loadHTML的主要内容,如果未能解决你的问题,请参考以下文章

PHP DOMDocument 添加了额外的标签

在 PHP 中从 DOMNode 创建 DOMDocument

PHP 4 中的新 DOMDocument()

PHP DOMDocument 丢失

这是 PHP 的 DOMDocument 库中的错误吗?

如何防止 PHP 的 DOMDocument 编码 html 实体?