HtmlParser初始研究
HtmlParser初步研究HtmlParser初步研究by?lostfire? 转自:http://www.blogjava.net/lostfire/archive/2006
HtmlParser初步研究
HtmlParser初步研究by?lostfire? 转自:http://www.blogjava.net/lostfire/archive/2006/07/02/56212.html
这两天准备做一些网站编程的工作,于是对HtmlParse小研究了一下,目的是快速入手,而不是深入研究,做了一下整理,和大家共同讨论一下。?一,数据组织分析:
HtmlParser主要靠Node、AbstractNode和Tag来表达Html,因为Remark和Text相对简单,此处就将其忽略了。
Node是形成树结构表示HTML的基础,所有的数据表示都是接口Node的实现,Node定义了与页面树结构所表达的页面Page对象,定义了获取父、子、兄弟节点的方法,定义了节点到对应html文本的方法,定义了该节点对应的起止位置,定义了过滤方法,定义了Visitor访问机制。AbstractNode是Node的一种具体的类实现,起到构成树形结构的作用,除了同具体Node相关的accetp方法,toString,toHtml,toPlainTextString方法以外,AbstractNode实现了大多基本的方法,使得它的子类,不用理会具体的树操作。Tag是具体分析的主要内容。Tag分成composite的Tag和不能包含其他Tag的简单Tag两类,其中前者的基类是CompositeTag,其子类包含BodyTag,Div,FrameSetTag,OptionTag,等27个子类;而简单Tag有BaseHrefTag、DoctypeTag,FrameTag,ImageTag,InputTag,JspTag,MetaTag,ProcessingInstructionTag这八类。Node分成三类:
RemarkNode:代表Html中的注释TagNode:标签节点,是种类最多的节点类型,上述Tag的具体节点类都是TagNode的实现。TextNode:文本节点?二,Visitor方式访问Html:?1,整体解析过程用一个URL或页面String做一个Parser用这个Parser做一个Visitor使用Parser.visitAllNodeWith(Visitor)来遍历节点获取Visitor遍历后得到的数据2,Visit过程