java - 确定正确的 html 标签关闭的算法

标签 java html algorithm parsing tags

我正在用 JAVA 编写自己的 HTML 解析器实现。 到目前为止,我已经完成了词法分析器并继续编写解析器。我正在创建 DOM 树,我想确定我的 HTML 是否构建正确。

例如,我有一个 img 标签,它是一个基于 w3 org html syntaxvoid 标签

而且它不需要结束标签。

另一方面,bodyhead 等大多数标签都必须有结束标签。

我的问题是:处理这个问题的正确方法是什么?

我不需要工具或任何外部站点来确定,我想问的是确定的方法。

最佳答案

您正在处理 HTML,因此标签集非常有限。您可以轻松跟踪标记是否为 void 标记。

对于其余的标签,我建议采用以下算法:

  1. 获取下一个标签。 (a) 如果它是一个开始标签,例如 ,只需将它插入 Stack。 (b) 如果是结束标签,则转到步骤 2。 (c) 如果没有更多标签需要解析,则您的 HTML 是有效的。

  2. 从 Stack 中一个接一个地弹出标签。 (a) 如果您在到达当前标签的开始对之前遇到堆栈中的另一个开始标签,那么您的 HTML 结构已损坏。 (b) 如果您清空堆栈并且仍然没有一对到您当前的结束标记,那么您的 HTML 再次损坏。 (c) 如果您遇到当前标签的开始对,则避免情况 (a) 和 (b)。转到步骤 1。

这是一个粗略的伪代码,但我希望你能理解。如有必要,我可以用 Java/C# 编写实现。

关于java - 确定正确的 html 标签关闭的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34731452/

相关文章:

java - 字符串置换算法的复杂性

java - 缩放后的 "straight line"图像跳出线条

java - 定义 SpoutConfig 参数

javascript - 将数据附加到 .each 循环中的 div 元素中

algorithm - 如何在不将文件存储在内存中的情况下从文件中读取 N 个随机行?

java - 静态成员序列化

html - css的图像问题

javascript - 如何修复 'Failed to load resource: The operation couldn' 无法完成。 iOS 12 视频中的“协议(protocol)错误”?

algorithm - 网络流算法的适当图形表示

c - 无符号整数的for循环