gpt4 book ai didi

PHP DOM 在没有 DOMDocumentFragment::appendXML 的情况下将 HTML 附加到现有文档

转载 作者:可可西里 更新时间:2023-10-31 22:45:38 25 4
gpt4 key购买 nike

我需要将一些任意 HTML 加载到现有的 DOMDocument 树中。以前的答案建议使用 DOMDocumentFragment及其 appendXML处理这个问题的方法。

作为@Owlvark在评论中指出,xml 不是 html,因此这不是一个好的解决方案。

我遇到的主要问题是 &ndash 之类的实体导致错误,因为 appendXML方法需要格式正确的 XML。

我们可以定义实体,但这并没有解决并非所有 html 都是有效 xml 的问题。

将 HTML 导入 DOMDocument 树的好的解决方案是什么?

最佳答案

我想出的解决方案是按照@FrankFarmer 的建议使用DomDocument::loadHtml,然后获取已解析的节点并将它们导入到我当前的文档中。我的实现看起来像这样

/**
* Parses HTML into DOMElements
* @param string $html the raw html to transform
* @param \DOMDocument $doc the document to import the nodes into
* @return array an array of DOMElements on success or an empty array on failure
*/
protected function htmlToDOM($html, $doc) {
$html = '<div id="html-to-dom-input-wrapper">' . $html . '</div>';
$hdoc = DOMDocument::loadHTML($html);
$child_array = array();
try {
$children = $hdoc->getElementById('html-to-dom-input-wrapper')->childNodes;
foreach($children as $child) {
$child = $doc->importNode($child, true);
array_push($child_array, $child);
}
} catch (Exception $ex) {
error_log($ex->getMessage(), 0);
}
return $child_array;
}

关于PHP DOM 在没有 DOMDocumentFragment::appendXML 的情况下将 HTML 附加到现有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12376686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com