我正在用 JAVA 编写自己的 HTML 解析器实现。 到目前为止,我已经完成了词法分析器并继续编写解析器。我正在创建 DOM 树,我想确定我的 HTML 是否构建正确。
例如,我有一个 img 标签,它是一个基于 w3 org html syntax 的 void 标签
而且它不需要结束标签。
另一方面,body、head 等大多数标签都必须有结束标签。
我的问题是:处理这个问题的正确方法是什么?
我不需要工具或任何外部站点来确定,我想问的是确定的方法。
最佳答案
您正在处理 HTML,因此标签集非常有限。您可以轻松跟踪标记是否为 void 标记。
对于其余的标签,我建议采用以下算法:
获取下一个标签。 (a) 如果它是一个开始标签,例如 ,只需将它插入 Stack。 (b) 如果是结束标签,则转到步骤 2。 (c) 如果没有更多标签需要解析,则您的 HTML 是有效的。
从 Stack 中一个接一个地弹出标签。 (a) 如果您在到达当前标签的开始对之前遇到堆栈中的另一个开始标签,那么您的 HTML 结构已损坏。 (b) 如果您清空堆栈并且仍然没有一对到您当前的结束标记,那么您的 HTML 再次损坏。 (c) 如果您遇到当前标签的开始对,则避免情况 (a) 和 (b)。转到步骤 1。
这是一个粗略的伪代码,但我希望你能理解。如有必要,我可以用 Java/C# 编写实现。
关于java - 确定正确的 html 标签关闭的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34731452/