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

正文內(nèi)容

htmlparser使用說(shuō)明書(shū)-文庫(kù)吧資料

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

【正文】 am args */ public static void main(String[] args) { try { URL ur = new URL(:8083/injs100/)。import 。import 。import 。import 。package parser。4. 入口方法main:該方法初始化HTMLParser并注冊(cè)新的節(jié)點(diǎn)解析器,解析文檔并打印運(yùn)行結(jié)果。這個(gè)方法的必要性在于HTML對(duì)格式的要求很不嚴(yán)格,在很多的HTML文檔中的一些標(biāo)簽經(jīng)常是有開(kāi)始標(biāo)識(shí),但是沒(méi)有結(jié)束標(biāo)識(shí),由于瀏覽器的超強(qiáng)適應(yīng)能力使這種情況出現(xiàn)的很頻繁,因此HTMLParser利用這個(gè)方法來(lái)輔助判斷一個(gè)標(biāo)簽是否已經(jīng)結(jié)束。從上圖可清楚看出,復(fù)合標(biāo)簽事實(shí)上是對(duì)簡(jiǎn)單標(biāo)簽的擴(kuò)展,HTMLParser在處理一個(gè)復(fù)合標(biāo)簽時(shí)需要知道該標(biāo)簽的起始標(biāo)識(shí)以及結(jié)束標(biāo)識(shí),也就是我們?cè)谇懊娼o出的源碼中的兩個(gè)方法getIds和getEnders,一般來(lái)講,標(biāo)簽出現(xiàn)都是成對(duì)的,因此這兩個(gè)方法一般返回相同的值。而像a href=xxxxHome/a這種類型的標(biāo)簽,因?yàn)闃?biāo)簽會(huì)嵌套文本或者其他標(biāo)簽的稱為復(fù)合標(biāo)簽,也就是對(duì)應(yīng)著CompositeTag這個(gè)類。我們先看看下面這個(gè)HTMLParser的節(jié)點(diǎn)類層次圖:如上圖所示,HTMLParser將一個(gè)文檔分成三種節(jié)點(diǎn)分別是:Remark(注釋);Text(文本);Tag(標(biāo)簽)。在這個(gè)例子中我們僅需要提取鏈接標(biāo)簽以及我們自定義的一個(gè)GO標(biāo)簽。2. 靜態(tài)屬性lnkFilter:這是一個(gè)NodeFilter的匿名類所構(gòu)造的實(shí)例。}public String getMethod(){(method)。}public String[] getEndTagEnders (){return (mEndTagEnders)。public String[] getIds (){return (mIds)。/*** WML文檔的GO標(biāo)簽解析器* author Winter Lau*/staticclass WmlGoTag extends CompositeTag {privatestaticfinal String[] mIds = new String[] {GO}。returnfalse。}/*** 解析出所有的鏈接,包括行為a與go*/static NodeFilter lnkFilter = new NodeFilter() {publicboolean accept(Node node) {if(node instanceof WmlGoTag)returntrue。}while(true)。if(()0)(\r\n)。do{String line = ()。BufferedReader in = new BufferedReader(new FileReader(f))。}}}/*** 獲取測(cè)試的WML腳本內(nèi)容* return* throws Exception*/static String getWmlContent() throws Exception{URL url = (/demo/htmlparser/)。}elseif(node instanceof WmlGoTag){WmlGoTag go = (WmlGoTag)node。if(node instanceof LinkTag){LinkTag link = (LinkTag)node。i()。//遍歷符合條件的所有節(jié)點(diǎn)NodeList nlist = (lnkFilter)。(new WmlGoTag ())。(getWmlContent())。/*** 用來(lái)遍歷WML文檔中的所有超鏈接* author Winter Lau*/publicclass HyperLinkTrace {publicstaticvoid main(String[] args) throws Exception {//初始化HTMLParserParser parser = new Parser()。import 。import 。import 。import 。import ?;仨?yè)首2. package 。下面我們先給出一個(gè)簡(jiǎn)單的例子,然后再敘述其中的道理。a href=?cat_id=1Java自由人/a或者:anchorJava自由人go href= method=getpostfield name=cat_id value=1//go/anchor(更多的時(shí)候使用 anchor 的鏈接用來(lái)提交一個(gè)表單。還有就是你同樣可以用 HTMLParser 來(lái)處理 XML 文檔,而 XML 文檔中所有的標(biāo)簽都是你自己定義的。首先我們先解釋一下什么叫自定義標(biāo)簽,我把所有不是 HTML 腳本語(yǔ)言中定義的標(biāo)簽稱之為自定義標(biāo)簽,比如可以是scriptlet、book等等,這是我們自己創(chuàng)造出來(lái)的標(biāo)簽。HTMLParser 的強(qiáng)大功能還體現(xiàn)在你可以修改每個(gè)標(biāo)簽的屬性或者它所包含的文本內(nèi)容并生成新的 HTML 文檔,比如你可以文檔中的鏈接地址偷偷的改成你自己的地址等等。如果是 HTML 文檔,那么用 HTMLParser 已經(jīng)差不多可以滿足你至少 90%的需求?,F(xiàn)在該項(xiàng)目的最新版本是 Integration Build ,與之前版本的差別在于代碼結(jié)構(gòu)的調(diào)整、當(dāng)然也有一些功能的提升以及 BugFix,同時(shí)對(duì)字符集的處理也更加自動(dòng)了。HTMLParser 是一個(gè)用來(lái)解析 HTML 文檔的開(kāi)放源碼項(xiàng)目,它具有小巧、快速、使用簡(jiǎn)單的特點(diǎn)以及擁有強(qiáng)大的功能。筆者個(gè)人的感覺(jué)是沒(méi)什么用處,如果你需要什么特定的功能,還不如自己寫(xiě)一個(gè),想在這些里面找到適合你需要的,化的時(shí)間可能更多。 其他VisitorHTMLParser還定義了幾個(gè)其他的Visitor。想讓它們都出來(lái),只需要NodeVisitor visitor = new NodeVisitor( true, true) {輸出結(jié)果:beginParsingThis is Tag:!DOCTYPE html PUBLIC //W3C//DTD XHTML Transitional//ENThis is Text:Txt (121[0,121],123[1,0]): \nThis is Tag:headThis is Tag:meta equiv=ContentType content=text/html。我們?cè)儆孟旅娴姆椒ㄕ{(diào)用看看:NodeVisitor visitor = new NodeVisitor( true, false) {輸出結(jié)果:beginParsingThis is Tag:!DOCTYPE html PUBLIC //W3C//DTD XHTML Transitional//ENThis is Text:Txt (121[0,121],123[1,0]): \nThis is Tag:meta equiv=ContentType content=text/html。我們先把recurseSelf設(shè)置成true,看看會(huì)發(fā)生什么。因?yàn)槲以O(shè)置的 recurseChildren和recurseSelf都是false,所以Visitor沒(méi)有訪問(wèn)子節(jié)點(diǎn)也沒(méi)有訪問(wèn)根節(jié)點(diǎn)的內(nèi)容。}catch( Exception e ) {()。}}。}publicvoid visitEndTag (Tag tag){message(visitEndTag:+())。}publicvoid visitRemarkNode (Remark remark) {message(This is Remark:+())。NodeVisitor visitor = new NodeVisitor( false, false ) {publicvoid visitTag(Tag tag) {message(This is Tag:+())。下面是一個(gè)最常見(jiàn)的NodeVisitro的例子。Visitor則是遍歷內(nèi)容樹(shù)的每一個(gè)節(jié)點(diǎn),對(duì)于符合條件的節(jié)點(diǎn)進(jìn)行處理。下面介紹使用Visitor訪問(wèn)內(nèi)容的方法。HTMLParser訪問(wèn)結(jié)果內(nèi)容的方法有兩種。這個(gè)不在本文的討論范圍以內(nèi),大家可以自己實(shí)驗(yàn)一下。NodeList nodes = (filter)。 LinkStringFilter這個(gè)Filter用于判斷鏈接中是否包含某個(gè)特定的字符串,可以用來(lái)過(guò)濾出指向某個(gè)特定網(wǎng)站的鏈接。NodeList nodes = (filter)。注意是可顯示的字符串,不可顯示的字符串中的內(nèi)容(例如注釋,鏈接等等)不會(huì)被顯示。NodeList nodes = (filter)。在HTMLParser使用入門(mén)(2) Node內(nèi)容中我們已經(jīng)了解了Node的不同類型,這個(gè)Filter就可以針對(duì)類型進(jìn)行過(guò)濾。NodeFilter filter = new XorFilter(filterID, filterChild)。 XorFilter把前面的AndFilter換成NotFilter測(cè)試代碼:NodeFilter filterID = new HasAttributeFilter( id )。NodeFilter filterChild = new HasChildFilter(filterA)。NodeFilter filter = new OrFilter(filterID, filterChild)。輸出結(jié)果:getText:div id=logoindex================================================= OrFilter把前面的AndFilter換成OrFilter測(cè)試代碼:NodeFilter filterID = new HasAttributeFilter( id )。NodeFilter filterChild = new HasChildFilter(filterA)。 AndFilterAndFilter可以把兩種Filter進(jìn)行組合,只有同時(shí)滿足條件的Node才會(huì)被過(guò)濾。HTMLParser支持對(duì)于簡(jiǎn)單類型的Filter進(jìn)行組合,從而實(shí)現(xiàn)復(fù)雜的條件。}不需要過(guò)多說(shuō)明了。IsEqualFilter的構(gòu)造函數(shù)參數(shù)是一個(gè)Node:public IsEqualFilter (Node node) {mNode = node。輸出結(jié)果:getText:div id=logoindex=================================================很簡(jiǎn)單吧。輸出結(jié)果:getText:div id=top_main=================================================getText:div id=logoindex=================================================調(diào)用方法3:NodeFilter filter = new HasAttributeFilter( id, logoindex )。調(diào)用方法2:NodeFilter filter = new HasAttributeFilter( id )。NodeList nodes = (filter)。還是用例子說(shuō)明比較容易。public HasAttributeFilter (String attribute, String value)。 HasAttributeFilterHasAttributeFilter有3個(gè)構(gòu)造函數(shù):public HasAttributeFilter ()。如果我們用下面的方法調(diào)用:NodeFilter filter = new HasChildFilter( innerFilter, true )。注意HasChildFilter還有一個(gè)構(gòu)造函數(shù):public HasChildFilter (NodeFilter filter, boolean recursive)如果recursive是false,則只對(duì)第一級(jí)子節(jié)點(diǎn)進(jìn)行過(guò)濾。輸出結(jié)果:getText:body=================================================getText:div id=top_main=================================================可以看到,輸出的是兩個(gè)有DIV子Tag的Tag節(jié)點(diǎn)。NodeFilter filter = new HasChildFilter(innerFilter)。呵呵。缺省的構(gòu)造函數(shù)雖然可以初始化,但是由于子節(jié)點(diǎn)的Filter是null,所以使用的時(shí)候發(fā)生了Exception。的時(shí)候HasChildFilter內(nèi)部直接發(fā)生NullPointerException。直接初始化了一個(gè)NodeFilter filter = new HasChildFilter()。下面可以針對(duì)這兩個(gè)DIV節(jié)
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1