2010-06-24 81 views
9

我对Erlang非常新,并且作为我学习练习的一部分,我想在Erlang中编写一个HTML解析器。在Erlang中编写一个HTML解析器

我想从网页中提取某些值,可能使用一种模式来描述我想要提取的数据。

任何人都可以为我提供一些关于他们如何在Erlang中解决这个问题的高级建议吗?

我想我需要把文档转换成一堆令牌,也许使用一个有限状态机来跟踪我在嵌套和我在元素中的位置。

回答

4

如果您打算完成这项工作,这是一项很大的工作。您最好使用Roberto建议的那个,但是如果您决定编写自己的项目来熟悉Erlang,这里有一些建议...

您应该先决定是否要手动创建,编码解析器或使用leex and yecc从语法生成解析器。如果你想学习如何编写惯用的Erlang,手写代码可能是一种更好的学习体验。编写解析器是向Erlang介绍自己的绝佳方式;函数式编程语言擅长实现解析器。其次,您应该决定是否要生成类似DOM的结构,或者在Erlang中执行类似SAX的回调模型behaviour。如果你使用后者,你可以简单地实现这个行为来创建一个DOM。

如果你看看行为,你可能也想看看parametrized modules。这是一个可以补充行为的实验性功能,允许将不可变状态存储在“模块实例”中。目前还不知道这个新功能是否会得到社区的支持。 (对于一些人来说,它看起来太OO)。

另一个优秀的资源是xmerl的代码。密切关注它如何确定字符编码并进行相应的解析。 HTML(各种标准)的工作方式略有不同,但重要的是在阅读文件时要考虑到正确的字符编码。

同样来自xmerl,您可以看到该库如何使用Erlang元组构造DOM。你可能想要做类似的事情。

+1

也许我草率建议你看一下参数化的模块。有避免它的好论据(http://stackoverflow.com/questions/2291155/what-alternatives-are-there-to-parameterised-modules-in-erlang)。 – dsmith 2010-06-25 01:32:41

+0

谢谢你的回答,这是一个学习练习,而不是许多人会用到的东西。 XMerl是一个很好的资源。 – dagda1 2010-06-25 09:44:53