在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转换为节点数组,可以轻松地遍历这些内容,对其进行定制化的渲染和处理。