在Erlang中编写一个HTML解析器

9
我对Erlang非常陌生,作为我的练习,我想在Erlang中编写一个HTML解析器。 我想从网页中提取某些值,可能使用模式来描述要提取的数据。 请问有人可以就如何在Erlang中处理此问题给予一些高层次的建议吗? 我认为我需要将文档转换为令牌堆栈,可能使用有限状态机来跟踪嵌套和元素中的位置。
2个回答

6

5

如果您打算做完整的工作,这是一项艰巨的任务。建议您使用Roberto建议的那个,但是如果您决定编写自己的项目以熟悉Erlang,则可以考虑以下建议......

首先,您应该决定是否要手动编写解析器,还是使用leex and yecc从语法生成解析器。如果想学习如何编写惯用Erlang的代码,手工编码可能是更好的学习经验。编写解析器是介绍自己Erlang的绝佳方式; 函数式编程语言擅长实现解析器。

其次,您应该确定是要生成类似DOM的结构还是采用SAX回调模型,即在Erlang中称为behaviour。 如果您选择后者,则可以实现行为来创建DOM。

如果您查看行为,您可能还希望了解参数化模块。这是一个实验性特性,可以补充行为,允许在“模块实例”中存储不可变状态。目前尚不清楚社区是否支持此新功能。(对于一些人来说,它看起来太面向对象了)。

另一个绝佳的资源是xmerl代码。请注意如何确定字符编码并相应解析。HTML(各种标准)有所不同,但在读取文件时考虑正确的字符编码非常重要。

此外,从xmerl中,您可以看到该库如何使用Erlang元组构建DOM。您可能希望采用类似的方法。


1
也许我过于草率地建议您研究参数化模块。有很好的理由避免使用它(https://dev59.com/c0zSa4cB1Zd3GeqPjRFM)。 - dsmith
谢谢您的回答,这只是一个学习练习而不是被许多人使用的东西。XMerl是一个很好的资源可以参考。 - dagda1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接