页面解析工具:HtmlParser学习

HtmlParser的数据组织分析:

Node是形成树结构表示HTML的基础,所有的数据表示都是接口Node的实现,Node定义了与页面树结构表达的页面Page对象,定义了获取父、子、兄弟节点的方法,定义了节点到对应的html文本的方法,定义了该节点对应的起至位置,定义了过滤方法,定义了Visitor访问机制。

 1 public interface Node
 2     extends
 3         Cloneable
 4 {
 5 
 6     String toPlainTextString ();
 7     String toHtml ();
 8     String toHtml (boolean verbatim);
 9     String toString ();
10     void collectInto (NodeList list, NodeFilter filter);
11     int getStartPosition ();
12     void setStartPosition (int position);
13     int getEndPosition ();
14     void setEndPosition (int position);
15     Page getPage ();
16     void setPage (Page page);
17     void accept (NodeVisitor visitor);
18     Node getParent ();
19     void setParent (Node node);
20     NodeList getChildren ();
21     void setChildren (NodeList children);
22     Node getFirstChild ();
23     Node getLastChild ();
24     Node getPreviousSibling ();
25     Node getNextSibling ();
26     String getText ();
27     void setText (String text);
28     void doSemanticAction ()
29         throws
30             ParserException;
31     Object clone ()
32         throws
33             CloneNotSupportedException;
34 }

AbstractNode是Node的一种具体的类实现,起到了构造树形结构的作用,除了同具体Node相关的accept方法,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:文本节点



 

posted @ 2009-06-25 15:44  chp008  阅读(580)  评论(0)    收藏  举报