HTMLParser 是一个用于解析 HTML 文档的 PHP 类库。要处理嵌套结构,你需要在解析过程中跟踪当前节点的层级。以下是一个简单的示例,说明如何使用 HTMLParser 类处理嵌套结构:
composer require "simplehtmldom/simple-html-dom"
NestedHTMLParser.php
的文件,并在其中编写以下代码:<?php
require_once 'vendor/autoload.php';
use simplehtmldom\HtmlWeb;
use simplehtmldom\HtmlNode;
class NestedHTMLParser
{
private $html;
private $currentLevel;
private $maxLevel;
public function __construct($url, $maxLevel = 2)
{
$this->html = file_get_html($url);
$this->currentLevel = 0;
$this->maxLevel = $maxLevel;
}
public function parse()
{
$this->parseNode($this->html->find('body')[0]);
}
private function parseNode(HtmlNode $node)
{
if ($this->currentLevel > $this->maxLevel) {
return;
}
echo "Level: {$this->currentLevel}, Tag: {$node->tagName}, Content: " . $node->innertext . PHP_EOL;
foreach ($node->childNodes as $childNode) {
if ($childNode->nodeType === \simplehtmldom\HtmlWeb\str_to_int('node_element')) {
$this->parseNode($childNode);
}
}
$this->currentLevel++;
}
}
$parser = new NestedHTMLParser('https://example.com');
$parser->parse();
在这个示例中,我们创建了一个名为 NestedHTMLParser
的类,它接受一个 URL 和一个可选的最大层级参数。parse
方法会解析给定 URL 的 HTML 文档,而 parseNode
方法会递归地处理每个节点。
要使用这个类,只需创建一个新的 NestedHTMLParser
实例并调用 parse
方法即可。例如:
$parser = new NestedHTMLParser('https://example.com');
$parser->parse();
这将输出给定 URL 的 HTML 文档中每个节点的层级、标签名和内容。你可以根据需要修改这个类以处理其他类型的节点或执行其他操作。