如何在PHP中将源HTML附加到DOM元素?

12

有没有一种方法可以将源HTML追加到DOM元素中?类似这样:

$trElement->appendSource("<a href='?select_user=4'>Username</a>");

它将解析该片段,然后将其附加。

3个回答

17
你正在寻找的是
{{link1:- DOMDocumentFragment::appendXML — 追加原始的 XML 数据}}
手册中的示例:
$doc = new DOMDocument();
$doc->loadXML("<root/>");
$f = $doc->createDocumentFragment();
$f->appendXML("<foo>text</foo><bar>text2</bar>");
$doc->documentElement->appendChild($f);
echo $doc->saveXML(); 

2
请注意:您的HTML输入必须是有效的XML,否则将出现错误。我所做的方式是创建另一个文档,将HTML加载到其中(作为HTML而不是XML),然后将新创建的节点进行深度导入,以便回到我的原始文档中。 - CJ Dennis
如果在添加外部代码后,您在DOMDocument :: saveHTML()上得到了“输出转换失败,由于conv错误”,则需要强制转换为特定的编码标准,例如通过utf8_encode() - kenorb

6
如果您在范围内没有对文档根目录的引用,您总是可以通过任意节点的ownerDocument属性访问它:
$frag = $trElement->ownerDocument->createDocumentFragment();
$frag->appendXML("<a href='?select_user=4'>Username</a>");
$trElement->appendChild($frag);

3

是的,您可以使用DOMDocument::createDocumentFragment来实现:

$fragment = $dom->createDocumentFragment();
$fragment->appendXML('<a href="select_user=4">Username</a>');
$element->appendChild($fragment);

在这种情况下,使用普通的createElement调用会更简单:

$el = $dom->createElement('a', 'Username');
$el->setAttribute('href', 'select_user=4');
$element->appendChild($el);

在每种情况下,$element是您要附加代码的DOM元素。

在这种情况下,使用普通的createElement调用会更简单:但是在我的应用程序中,输入可能是任意的,因此片段对于这个问题是可以的。 - fabio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接