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 }
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:文本节点