freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

htmlparser使用說(shuō)明書-展示頁(yè)

2025-06-07 22:30本頁(yè)面
  

【正文】 點(diǎn)進(jìn)行操作 HasChildFilter下面讓我們看看HasChildFilter。}}}catch( Exception e ) {()。message(getText:+())。 i ()。NodeList nodes = (filter)。// 這里是控制測(cè)試的部分,后面的例子修改的就是這個(gè)地方。(二)判斷類Filter TagNameFilterTabNameFilter是最容易理解的一個(gè)Filter,根據(jù)Tag的名字進(jìn)行過(guò)濾。這個(gè)接口只有一個(gè)主要函數(shù):boolean accept (Node node)。也可以分為幾類。第一類函數(shù)比較容易理解,下面用例子說(shuō)明一下第二類函數(shù)。用于Visitor遍歷的函數(shù):void accept (NodeVisitor visitor):對(duì)這個(gè)Node應(yīng)用visitor用于修改內(nèi)容的函數(shù),這類用得比較少:void setPage (Page page):設(shè)置這個(gè)Node對(duì)應(yīng)的Page對(duì)象void setText (String text):設(shè)置文本void setChildren (NodeList children):設(shè)置子節(jié)點(diǎn)列表其他函數(shù):void doSemanticAction ():執(zhí)行這個(gè)Node對(duì)應(yīng)的操作(只有少數(shù)Tag有對(duì)應(yīng)的操作)Object clone ():接口Clone的抽象函數(shù)。Node中包含的方法有幾類:對(duì)于樹型結(jié)構(gòu)進(jìn)行遍歷的函數(shù),這些函數(shù)最容易理解:Node getParent ():取得父節(jié)點(diǎn)NodeList getChildren ():取得子節(jié)點(diǎn)的列表Node getFirstChild ():取得第一個(gè)子節(jié)點(diǎn)Node getLastChild ():取得最后一個(gè)子節(jié)點(diǎn)Node getPreviousSibling ():取得前一個(gè)兄弟Node getNextSibling ():取得下一個(gè)兄弟節(jié)點(diǎn)取得Node內(nèi)容的函數(shù):String getText ():取得文本String toPlainTextString():取得純文本信息。Node是信息保存的數(shù)據(jù)類型基礎(chǔ)。大家看到能Parser出內(nèi)容就可以了,如何操作訪問(wèn)Parser的內(nèi)容我們?cè)诤竺嬗懻?。message(textInPage)。(visitor)。Parser parser = new Parser( (HttpURLConnection) (new URL(:8080/)).openConnection() )。try{//Parser parser = (szContent, ENCODE)。}catch( Exception e ) {return。}()。String szTemp。 } catch(Exception e ){}}publicstatic String openFile( String szFileName ) {try {BufferedReader bis = new BufferedReader(new InputStreamReader(new FileInputStream( new File(szFileName)), ENCODE) )。/*** author */publicclass Main {privatestatic String ENCODE = GBK。import 。import 。import 。import 。下面是初始化Parser的例子。這里比較有趣的一點(diǎn)是,如果需要設(shè)置頁(yè)面的編碼方式的話,不使用Lexer就只有靜態(tài)函數(shù)一個(gè)方法了。ParserFeedback的代碼很簡(jiǎn)單,是針對(duì)調(diào)試和跟蹤分析過(guò)程的,一般不需要改變。和一個(gè)靜態(tài)類public static Parser createParser (String html, String charset)。public Parser (Lexer lexer)。public Parser (String resource, ParserFeedback feedback) throws ParserException。public Parser (Lexer lexer, ParserFeedback fb)。HTMLParser使用說(shuō)明書,這個(gè)類實(shí)際完成了對(duì)于HTML頁(yè)面的分析工作。這個(gè)類有下面幾個(gè)構(gòu)造函數(shù):public Parser ()。public Parser (URLConnection connection, ParserFeedback fb) throws ParserException。public Parser (String resource) throws ParserException。public Parser (URLConnection connection) throws ParserException。對(duì)于大多數(shù)使用者來(lái)說(shuō),使用最多的是通過(guò)一個(gè)URLConnection或者一個(gè)保存有網(wǎng)頁(yè)內(nèi)容的字符串來(lái)初始化Parser,或者使用靜態(tài)函數(shù)來(lái)生成一個(gè)Parser對(duì)象。而使用Lexer則是一個(gè)相對(duì)比較高級(jí)的話題,放到以后再討論吧。對(duì)于大多數(shù)中文頁(yè)面來(lái)說(shuō),好像這是應(yīng)該用得比較多的一個(gè)方法。package 。import 。import 。import 。import 。privatestaticvoid message( String szMsg ) {try{(new String((ENCODE), ()))。String szContent=。while ( (szTemp = ()) != null) {szContent+=szTemp+\n。return szContent。}}publicstaticvoid main(String[] args) {String szContent = openFile( E:/My Sites/)。//Parser parser = new Parser( szContent )。TextExtractingVisitor visitor = new TextExtractingVisitor()。String textInPage = ()。}catch( Exception e ) {}}}加重的部分測(cè)試了幾種不同的初始化方法,后面的顯示了結(jié)果。HTMLParser將解析過(guò)的信息保存為一個(gè)樹的結(jié)構(gòu)。請(qǐng)看Node的定義:publicinterface Node extends Cloneable。String toHtml () :取得HTML信息(原始HTML)String toHtml (boolean verbatim):取得HTML信息(原始HTML)String toString ():取得字符串信息(原始HTML)Page getPage ():取得這個(gè)Node對(duì)應(yīng)的Page對(duì)象int getStartPosition ():取得這個(gè)Node在HTML頁(yè)面中的起始位置int getEndPosition ():取得這個(gè)Node在HTML頁(yè)面中的結(jié)束位置用于Filter過(guò)濾的函數(shù):void collectInto (NodeList list, NodeFilter filter):基于filter的條件對(duì)于這個(gè)節(jié)點(diǎn)進(jìn)行過(guò)濾,符合條件的節(jié)點(diǎn)放到list中。實(shí)際我們用HTMLParser最多的是處理HTML頁(yè)面,F(xiàn)ilter或Visitor相關(guān)的函數(shù)是必須的,然后第一類和第二類函數(shù)是用得最多的。(一)Filter類顧名思義,F(xiàn)ilter就是對(duì)于結(jié)果進(jìn)行過(guò)濾,取得需要的內(nèi)容。判斷類Filter:TagNameFilterHasAttributeFilterHasChildFilterHasParentFilterHasSiblingFilterIsEqualFilter邏輯運(yùn)算Filter:AndFilterNotFilterOrFilterXorFilter其他Filter:NodeClassFilterStringFilterLinkStringFilterLinkRegexFilterRegexFilterCssSelectorNodeFilter。各個(gè)子類分別實(shí)現(xiàn)這個(gè)函數(shù),用于判斷輸入的Node是否符合這個(gè)Filter的過(guò)濾條件,如果符合,返回true,否則返回false。publicstaticvoid main(String[] args) {try{Parser parser = new Parser( (HttpURLConnection) (new URL(:8080/)).openConnection() )。NodeFilter filter = new TagNameFilter (DIV)。if(nodes!=null) {for (int i = 0。 i++) {Node textnode = (Node) (i)。message(=================================================)。}}輸出結(jié)果:getText:div id=top_main=================================================getText:div id=logoindex=================================================可以看出文件中兩個(gè)Div節(jié)點(diǎn)都被取出了。剛剛看到這個(gè)Filter的時(shí)候,我想當(dāng)然地認(rèn)為這個(gè)Filter返回的是有Child的Tag。結(jié)果調(diào)用NodeList nodes = (filter)。讀了一下HasChildFilter的代碼,才發(fā)現(xiàn),實(shí)際HasChildFilter是返回有符合條件的子節(jié)點(diǎn)的節(jié)點(diǎn),需要另外一個(gè)Filter作為過(guò)濾子節(jié)點(diǎn)的參數(shù)。從這點(diǎn)來(lái)看,HTMLParser的代碼還有很多可以優(yōu)化的的地方。修改代碼:NodeFilter innerFilter = new TagNameFilter (DIV)。NodeList nodes = (filter)。(body有子節(jié)點(diǎn)DIV top_main,top_main有子節(jié)點(diǎn)logoindex。比如前面的例子,body和top_main都是在第一級(jí)的子節(jié)點(diǎn)里就有DIV節(jié)點(diǎn),所以匹配上了??梢钥吹捷敵鼋Y(jié)果中多了一個(gè)html xmlns=,這個(gè)是整個(gè)HTML頁(yè)面的節(jié)點(diǎn)(根節(jié)點(diǎn)),雖然這個(gè)節(jié)點(diǎn)下直接沒(méi)有DIV節(jié)點(diǎn),但是它的子節(jié)點(diǎn)body下面有DIV節(jié)點(diǎn),所以它也被匹配上了。public HasAttributeFilter (String attribute)。這個(gè)Filter可以匹配出包含制定名字的屬性,或者制定屬性為指定值的節(jié)點(diǎn)。調(diào)用方法1:NodeFilter filter = new HasAttributeFilter()。輸出結(jié)果:什么也沒(méi)有輸出。NodeList nodes = (filter)。NodeList nodes = (filter)。呵呵 其他判斷列FilterHasParentFilter和HasSiblingFilter的功能與HasChildFilter類似,大家自己試一下就應(yīng)該了解了。}accept函數(shù)也很簡(jiǎn)單:publicboolean accept (Node node) {return (mNode == node)。(三)邏輯運(yùn)算Filter前面介紹的都是簡(jiǎn)單的Filter,只能針對(duì)某種單一類型的條件進(jìn)行過(guò)濾。原理和一般編程語(yǔ)言的邏輯運(yùn)算是一樣的。測(cè)試代碼:NodeFilter filterID = new HasAttributeFilter( id )。NodeFilter filter = new AndFilter(filterID, filterChild)。NodeFilter filterChild = new HasChildFilter(filterA)。輸出結(jié)果:getText:div id=top_main=================================================getText:div id=logoindex================================================= NotFilter把前面的AndFilter換成NotFilter測(cè)試代碼:NodeFilter filterID = new HasAttributeFilter( id )。NodeFilter filter = new NotFilter(new OrFilter(filterID, filterChild))。NodeFilter filterChild = new HasChildFilter(filterA)。(四)其他Filter: NodeClassFilter這個(gè)Filter用于判斷節(jié)點(diǎn)類型是否是某個(gè)特定的Node類型。測(cè)試代碼:NodeFilter filter
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1