HTMLParser1.6 源代码阅读

吸取上次代码过多的教训,这次主要讲设计。

org.htmlparser.lexer 包,是主要的进行html解析的包。Page类可以根绝传入的urlConnection,text,stream等类型,构造相应的Page对象,Page对象中比较关键的是Source,url,PageIndex对象,他们的用途是:Source相当于一个Reader,但是与Reader不同的地方是,Source应当是线程同步的,字符可以改变,而且有可能多次请求。这边主要是要对解析的内容进行记录,记录位置等信息。Source是抽象类,具体的实现是StringSource和InputStreamSource。而inputStreamSource 的同步操作是依赖Stream类实现的同步方法。对于string类型的的source,直接构造相应buffered data即可。pageIndex对象是是对每行的第一个字符的位置进行记录。最后lexer是对page对象进行词法解析,我们看到有如下的几个方法,parseCDATA,scanJIS,parseString,parseTag,parseRemark,parseJsp,parsePI。这个可能要根据不同的页面进行不同的解析方法的编写。剩下的比较重要的包无非就是filter包。那这样我们对HTMLParser的构造就大致了解了,用图呈现如下:


HTMLParser各个包之间的关系图(只将比较重要的几个类,用流程的方式串联起来)

以上是我对htmlparser 包和类之间的分析,具体的htmlparser的包的组织结构如下图:

大部分的包都在关系图中显示了,剩下的是一些测试包,一些数据的组织包,并不是htmlparser的核心。按照这个思路,下一步可以自己做一个小型的parser解析器了。

总感觉少了点什么,缺又不清楚少了什么。

posted @ 2012-07-17 11:15  庸蛹  阅读(1532)  评论(0编辑  收藏  举报