我对Erlang非常陌生,作为我的练习,我想在Erlang中编写一个HTML解析器。 我想从网页中提取某些值,可能使用模式来描述要提取的数据。 请问有人可以就如何在Erlang中处理此问题给予一些高层次的建议吗? 我认为我需要将文档转换为令牌堆栈,可能使用有限状态机来跟踪嵌套和元素中的位置。
http://github.com/mochi/mochiweb/blob/master/src/mochiweb_html.erl
parse/1
函数可能是你感兴趣的入口点。
如果您打算做完整的工作,这是一项艰巨的任务。建议您使用Roberto建议的那个,但是如果您决定编写自己的项目以熟悉Erlang,则可以考虑以下建议......
首先,您应该决定是否要手动编写解析器,还是使用leex and yecc从语法生成解析器。如果想学习如何编写惯用Erlang的代码,手工编码可能是更好的学习经验。编写解析器是介绍自己Erlang的绝佳方式; 函数式编程语言擅长实现解析器。
其次,您应该确定是要生成类似DOM的结构还是采用SAX回调模型,即在Erlang中称为behaviour。 如果您选择后者,则可以实现行为来创建DOM。
如果您查看行为,您可能还希望了解参数化模块。这是一个实验性特性,可以补充行为,允许在“模块实例”中存储不可变状态。目前尚不清楚社区是否支持此新功能。(对于一些人来说,它看起来太面向对象了)。
另一个绝佳的资源是xmerl代码。请注意如何确定字符编码并相应解析。HTML(各种标准)有所不同,但在读取文件时考虑正确的字符编码非常重要。
此外,从xmerl中,您可以看到该库如何使用Erlang元组构建DOM。您可能希望采用类似的方法。