HTMLParser將解析過的資訊保存為一個樹的結構。 Node是資訊保存的資料類型基礎。
請看Node的定義:
public interface Node extends Cloneable;
Node中包含的方法有幾類:
對於樹型結構遍歷的函數,這些函數最容易理解:
Node getParent ():取得父节点 NodeList getChildren ():取得子节点的列表 Node getFirstChild ():取得第一个子节点 Node getLastChild ():取得最后一个子节点 Node getPreviousSibling ():取得前一个兄弟(不好意思,英文是兄弟姐妹,直译太麻烦而且不符合习惯,对不起女同胞了) Node getNextSibling ():取得下一个兄弟节点
取得內容的函數:
String getText ():取得文本 String toPlainTextString():取得纯文本信息。 String toHtml () :取得HTML信息(原始HTML) String toHtml (boolean verbatim):取得HTML信息(原始HTML) String toString ():取得字符串信息(原始HTML) Page getPage ():取得这个Node对应的Page对象 int getStartPosition ():取得这个Node在HTML页面中的起始位置 int getEndPosition ():取得这个Node在HTML页面中的结束位置
用於Visitor遍歷的函數:
void collectInto (NodeList list, NodeFilter filter):基于filter的条件对于这个节点进行过滤,符合条件的节点放到list中。
用於修改內容的函數,這類用得比較少:
void accept (NodeVisitor visitor):对这个Node应用visitor
void setPage (Page page):设置这个Node对应的Page对象 void setText (String text):设置文本 void setChildren (NodeList children):设置子节点列表
void doSemanticAction ():执行这个Node对应的操作(只有少数Tag有对应的操作) Object clone ():接口Clone的抽象函数。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>白泽居-www.baizeju.com</title></head> <html xmlns="http://www.w3.org/1999/xhtml"> <body > <div id="top_main"> <div id="logoindex"> <!--这是注释--> 白泽居-www.baizeju.com <a href="http://www.baizeju.com">白泽居-www.baizeju.com</a> </div> 白泽居-www.baizeju.com </div> </body> </html>
對於第一個Node的內容,對應的就是第一行,這個比較好理解。
從這個輸出結果中,也可以看出內容的樹狀結構。或者說是樹林結構。在Page內容的第一層Tag,如DOCTYPE,head和html,分別形成了一個最高層的Node節點(很多人可能對第二個和第四個Node的內容有點奇怪。實際上這兩個Node就是兩個換行符號。看到的內容都包含了。有趣的有兩點,一是
另外可能大家發現toHtml,toHtml(true)和toHtml(false)的結果沒什麼差別。實際上也是這樣的,如果追蹤HTMLParser的程式碼就可以發現,Node的子類別是AbstractNode,其中實作了toHtml()的程式碼,直接呼叫toHtml(false),而AbstractNode的三個子類別RemarkNode,TagNode和TextNode中, toHtml(boolean verbatim)的實作中,都沒有處理verbatim參數,所以三個函數的結果是一模一樣的。如果你不需要實作你自己的什麼特殊處理,簡單使用toHtml就可以了。
以上就是HTMLParser使用詳解(2)的內容,更多相關內容請關注PHP中文網(www.php.cn)!