【问题标题】:PHP DOMDocument - createDocumentFragment does not work with loadHTMLPHP DOMDocument - createDocumentFragment 不适用于 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 部分无论如何都坏了。
  • 期望得到什么?无子节点的“价值”是什么?

标签: php html xml dom fragment


【解决方案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>

【讨论】:

    猜你喜欢
    • 2012-05-18
    • 2017-01-02
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2012-09-01
    • 2017-08-03
    相关资源
    最近更新 更多