在Web开发中,HTML文档的结构和内容往往需要通过编程方式进行操作和解析。PHP DOMDocument类是一个强大的工具,可以将HTML转换为可操作的对象结构,本文将介绍一下使用PHP的DOMDocument类将HTML转换为节点数组的过程。htmlToNodes函数将HTML字符串作为输入,并返回一个包含HTML文档结构的嵌套数组。通过这个函数,可以便捷地处理HTML内容,无论是进行网页爬虫、内容管理还是构建复杂的Web应用程序,都能大大提高开发效率和灵活性。
function htmlToNodes($html) {
$html = "<body><div>".$html."</div></body>";
$dom = new DOMDocument();
libxml_use_internal_errors(true); // 禁用错误报告
@$dom->loadHTML('<?xml encoding="UTF-8">' . $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_clear_errors(); // 清除错误
$nodes = [];
function parseNode($node) {
global $nodes;
$item = [
'name' => $node->nodeName,
];
if ($node->hasAttributes()) {
$attrs = [];
foreach ($node->attributes as $attr) {
$attrs[$attr->nodeName] = $attr->nodeValue;
}
$item['attrs'] = $attrs;
}
if ($node->hasChildNodes()) {
$children = [];
foreach ($node->childNodes as $child) {
if ($child->nodeType === XML_TEXT_NODE) {
$children[] = [
'type' => 'text',
'text' => $child->wholeText,
];
} else {
$children[] = parseNode($child);
}
}
$item['children'] = $children;
}
return $item;
}
foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $child) {
$nodes[] = parseNode($child);
}
return $nodes;
}
通过将HTML转换为节点数组,可以轻松地遍历这些内容,对其进行定制化的渲染和处理。
比如用于uni-app的rich-text渲染。