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>π</default:mi></default:math></formula></p>"
$dom = new \DOMDocument();
@$dom->loadHTML($abstract);
$frag = $dom->createDocumentFragment();
当 var 转储 $frag->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的主要内容,如果未能解决你的问题,请参考以下文章