编写HTML解析器

编写HTML解析器,第1张

概述我正在尝试(或计划尝试)编写一个简单(尽可能)的程序来将html文档解析成树。 在谷歌搜索之后,我发现很多答案说“不要这样做”(或者说这样的话);并引用HTML解析器的例子;也是一个非常强调的文章,为什么不应该使用正式表达。但是我没有找到任何指导,以“正确”的方式写一个解析器。 (顺便说一句,我正在尝试更多的是一种学习风格,而不是任何事情,所以我很想做,而不是使用一个预制的) 我相信只要读取文档并 我正在尝试(或计划尝试)编写一个简单(尽可能)的程序来将HTML文档解析成树。

在谷歌搜索之后,我发现很多答案说“不要这样做”(或者说这样的话);并引用HTML解析器的例子;也是一个非常强调的文章,为什么不应该使用正式表达。但是我没有找到任何指导,以“正确”的方式写一个解析器。 (顺便说一句,我正在尝试更多的是一种学习风格,而不是任何事情,所以我很想做,而不是使用一个预制的)

我相信只要读取文档并将标签/文本等添加到树中,我就可以制作一个工作的XML解析器,只要我打了一个关闭标签(再次简单,没有花哨的线程或这个阶段需要的效率) )。但是,对于HTML并不是所有的标签都关闭。

所以我的问题是这样的:你会推荐什么来处理这个问题?我唯一的想法是以类似于XML的方式对待它,但是有一个标签的列表,这些标签不一定要关闭,每个都有关闭的条件(例如< p>结束于< / p>或下一个< p>标签)。

有谁有任何其他(希望更好)的建议?有没有更好的方式这样做?

解决方法 所以我会在这里尝试一个答案 –

基本上,什么使得“简单”HTML解析(不涉及这里的有效xhtml)与xml解析不同是诸如永无止境的< img>标签之类的规则的加载,或严格地说,即使是所有HTML标记中最高的将在浏览器中进行渲染。
您将需要一个验证器以及解析器来构建您的树。但是,您必须确定要支持的HTML标准,以便当您遇到标记的弱点时,您会知道这是一个错误,而不仅仅是一个拙劣的HTML。

知道所有的规则,构建一个验证器,然后你就可以构建一个解析器。这是计划A.

计划B将会在您的解析器中允许一定的错误阻力,这将使验证步骤不必要。例如,解析所有标签,并将其放在列表中,省略任何属性,以便您可以轻松地在列表上 *** 作,确定标签是否保持打开状态,或者始终未打开,最终获得“好” “布局树,这将是粗略布局的一个近似解决方案,同时准确地正确布局。

希望有所帮助!

总结

以上是内存溢出为你收集整理的编写HTML解析器全部内容,希望文章能够帮你解决编写HTML解析器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1115804.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存