dom4j解析XML文檔人文社科_第1頁
dom4j解析XML文檔人文社科_第2頁
dom4j解析XML文檔人文社科_第3頁
dom4j解析XML文檔人文社科_第4頁
dom4j解析XML文檔人文社科_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1/1dom4j解析XML文檔-人文社科

dom4j解析XML文檔

DOM4J解析XML文檔學(xué)習(xí)目標(biāo)把握dom4j的概念和特點(diǎn)把握dom4j的常用接口嫻熟把握使用dom4j解析XML文檔嫻熟把握使用訪問者模式遍歷XML文檔把握使用dom4j創(chuàng)建和修改XML文檔

dom4j解析XML文檔

JAXP雖然在DOM和SAX解析機(jī)制上進(jìn)行了肯定的抽象,但是對XML解析特別繁瑣,編程代碼冗長,可讀性不高。因此在JAVA領(lǐng)域消失了兩個(gè)開源的XML解析器:dom4j和JDOM。dom4j的開發(fā)者說:使用dom4j來解析XML文檔,無須參考任何圖書,只要有基本的DOM概念,那么對著dom4j的API文檔即可使用dom4j解析。

dom4j解析XML文檔

dom4j概述dom4j是一套開源的XML解析工具,完全支持DOM、SAX和JAXP機(jī)制。與它們相比,dom4j更為簡潔易用,因此實(shí)際項(xiàng)目中往往選擇dom4j作為XML解析器。dom4j沒有供應(yīng)其他語言版本,只供應(yīng)JAVA語言版本。

dom4j解析XML文檔

dom4j的封裝和優(yōu)勢dom4j在很大程序上簡化了XML的處理方式。從表面上看,dom4j有點(diǎn)類似于DOM解析機(jī)制,也將XML文檔轉(zhuǎn)換為一棵結(jié)構(gòu)化樹(dom4j樹),但dom4j樹的處理方式比DOM樹更為簡潔。dom4jDOM由于dom4j如此優(yōu)秀,許多優(yōu)秀的開源項(xiàng)目都采用dom4j作為XML解析器,在實(shí)際的開發(fā)過程中,它通常是首選。

dom4j解析XML文檔

面對接口編程它的實(shí)質(zhì)是以其他XML解析器為基礎(chǔ),dom4j采納面向接口編程的方式來處理XML文檔解析,這就允許dom4j的底層可以在不同的解析機(jī)制之間自由切換。

支持多種解析機(jī)制

DOMReader:它負(fù)責(zé)依據(jù)W3C的DOM樹創(chuàng)建dom4j樹SAXReader:它基于SAX解析機(jī)制來分析一份XML文檔,并將其轉(zhuǎn)換為dom4j樹XPP3Reader:其底層需要依靠于XMLPulllParser3.x來解析XML文檔,并將其轉(zhuǎn)換為dom4j樹XPPReader:其底層需要依靠于XMLPulllParser2.x來解析XML文檔,并將其轉(zhuǎn)換為dom4j樹

dom4j解析XML文檔

listbook瘋狂XML講義/bookgame掃雷/gamesport乒乓球/sport/list

在獵取list…/節(jié)點(diǎn)之后,假如盼望獵取它包含的3個(gè)子節(jié)點(diǎn)的數(shù)節(jié)點(diǎn)之后,假如盼望獵取它包含的個(gè)子節(jié)點(diǎn)的數(shù)在獵取節(jié)點(diǎn)之后據(jù),需要使用如下代碼//獵取list元素下的全部子元素NodeListitemList=list.getChildNodes;//遍歷每個(gè)子元素for(intI=0;IitemList.getLength;I++){System.out.println(itemList.item(j).getTextContent.trim);}

這種處理方式很是繁瑣,元素調(diào)用元素調(diào)用getChildNodes方法返回該這種處理方式很是繁瑣,list元素調(diào)用方法返回該元素的全部子節(jié)點(diǎn),而不是全部的子元素,元素的全部子節(jié)點(diǎn),而不是全部的子元素,這使得程序的處理過程特別繁瑣。程特別繁瑣。

dom4j解析XML文檔

//獵取list元素下的全部子元素ListitemList=list.elements;//遍歷每個(gè)子元素for(intI=0;IitemList.getLength;I++){Elementele=(Element)itemList.get(I);System.out.println(els.getText);}

list元素調(diào)用元素調(diào)用elements方法返回該元

素的全部子元素包括子節(jié)點(diǎn)方法返回該元素的全部子元素(包括子節(jié)點(diǎn)元素調(diào)用方法返回該元素的全部子元素和該節(jié)點(diǎn)的文本內(nèi)容),dom4j處理方式更接近平常自然的思維。和該節(jié)點(diǎn)的文本內(nèi)容)處理方式更接近平常自然的思維。處理方式更接近平常自然的思維

dom4j解析XML文檔

下載和安裝dom4j登錄dom4j的官方站點(diǎn)下載最新版本dom4j1.6.1下載完成后得到dom4j1.6.1.zip,將其解壓縮可得到如下名目結(jié)構(gòu)

docs:docs:該名目下存放了dom4j的說明文件和API文檔dom4jAPIlib:該名目下存放了dom4j編譯和運(yùn)行所依靠的第三方類庫Src:該名目下存放了dom4j項(xiàng)目的全部源文件xdocs:該名目存放dom4j的一些相關(guān)文檔,是XML格式xml:該名目下存放了dom4j供應(yīng)了一些簡潔的范例xml文檔dom4j-1.6.1.jar:dom4j的核心JAR包

將dom4j-1.6.1.jar添加到系統(tǒng)CLASSPATH環(huán)境變量中

dom4j解析XML文檔

Dom4j常用的API【重點(diǎn)把握】ElementBranchDocument

Cloneable

Node

Attribute

DocumentType

CharacterData

ProcessingInstruction

CDATA

Text

Comment

dom4j解析XML文檔

Dom4j的API接口NodeBranchElementDoucmentAttributeDocumentTypeProceesingInstructionCharacterDataCDATATextComment

簡潔說明它是dom4j樹中全部節(jié)點(diǎn)的跟接口它代表能包含子節(jié)點(diǎn)的節(jié)點(diǎn)它代表XML元素它代表XML文檔根它代表XML元素屬性它代表XML文檔中的DOCTYPE聲明它代表XML文檔中的處理指令它是全部文本元素的父接口它代表XML文檔中的CDATA段它代表XML文檔里的文本內(nèi)容它代表XML文檔里的解釋內(nèi)容

dom4j解析XML文檔

除此之外,dom4j為解析xml文檔還供應(yīng)了DOMReader、SaxReader、XPP3Reader和XPPReader4個(gè)解析器,負(fù)責(zé)將不同形式的XML文檔解析成dom4j樹。對應(yīng)地,dom4j也供應(yīng)了如下幾個(gè)Writer:DOMWriter:該輸出工具類負(fù)責(zé)將dom4j樹轉(zhuǎn)換成為W3C的DOM樹SAXWriter:該輸出工具類負(fù)責(zé)將dom4j樹輸出給SAX的ContendHandler處理XMLWriter:該工具類將dom4j樹轉(zhuǎn)換成對應(yīng)的XML文檔,并可輸出到指定流中

dom4j解析XML文檔

除此之外,假如程序需要?jiǎng)?chuàng)建一份新Document,dom4j還供應(yīng)了如下2個(gè)工具類DocumentFactory:該工具供應(yīng)createDocument方法用于創(chuàng)建Document對象DocumentHelper該工具供應(yīng)了大量靜態(tài)方法用于創(chuàng)建XML文檔各組成部分

dom4j解析XML文檔

使用dom4j解析XML文檔【重點(diǎn)把握】使用dom4j解析XML文檔的過程是這樣的,首先是將XML文檔轉(zhuǎn)換成dom4j樹之后,使用全都的編程模型來處理XML文檔。我們可以采納遞歸方法來獵取整份XML文檔里包含的信息。publicclassDom4jRead{publicstaticvoidmain(Stringargs)throwsException{//使用SAXReader來解析XML文檔SAXReaderreader=newSAXReader;Documentdoc=reader.read(newFile(book.xml));Elementroot=doc.getRootElement;parse(root);}

dom4j解析XML文檔

publicstaticvoidparse(Elementele){//處理當(dāng)前元素包含的全部屬性pars

eAttribute(ele);//獵取當(dāng)前元素包含的全部子元素Listel=ele.elements;//遍歷每個(gè)子元素for(Objecte:el){Elementelement=(Element)e;//假如該元素的內(nèi)容不是只包含字符串if(!element.isTextOnly){parse(element);}else{//處理當(dāng)前元素的全部屬性parseAttribute(element);//獵取當(dāng)前元素的內(nèi)容System.out.println(element.getQName.getName++element.getText);}}}

dom4j解析XML文檔

//定義一個(gè)方法處理指定元素的全部屬性publicstaticvoidparseAttribute(Elementele){//獵取Element元素的全部屬性ListattList=ele.attributes;//遍歷Element元素每個(gè)屬性for(Objecte:attList){Attributeattr=(Attribute)e;//訪問當(dāng)前元素的每個(gè)屬性的屬性值System.out.println(ele.getQName.getName+元素的+attr.getQName.getName+屬性值為:+attr.getValue);}}

dom4j解析XML文檔

使用訪問者遍歷XML文檔【重點(diǎn)把握】dom4j的Node接口中定義了一個(gè)accept(Visitorvistor)方法,由于該方法是在Node接口中定義的,因此dom4j樹中的任何節(jié)點(diǎn)都可以調(diào)用該方法,調(diào)用該方法時(shí)傳入的Visitor對象將負(fù)責(zé)處理該節(jié)點(diǎn)及其全部子節(jié)點(diǎn)的信息。Visitor接口和VisitorSupport類的關(guān)系就像大事監(jiān)聽接口和大事適配器一樣。VisitorSupport類實(shí)現(xiàn)了Visitor接口,并為每個(gè)方法供應(yīng)了空實(shí)現(xiàn)。當(dāng)開發(fā)者通過繼承VisitorSupport類來實(shí)現(xiàn)自己的Visitor時(shí)就可以只重寫自己關(guān)系的方法,從而避開重寫Visitor接口里的全部方法。

dom4j解析XML文檔

Vistor接口的方法visit(Attributenode)visit(CDATAnode)

簡潔說明當(dāng)Visitor對象訪問屬性節(jié)點(diǎn)時(shí)將回調(diào)該方法當(dāng)Visitor對象訪問CDATA片段時(shí)將回調(diào)該方法當(dāng)Visitor對象訪問解釋節(jié)點(diǎn)時(shí)將回調(diào)該方法當(dāng)Visitor對象訪問文檔根節(jié)點(diǎn)時(shí)將回調(diào)該方法當(dāng)Visitor對象訪問DTD內(nèi)容將回調(diào)該方法當(dāng)Visitor對象訪問元素節(jié)點(diǎn)將回調(diào)該方法當(dāng)Visitor對象訪問Entity節(jié)點(diǎn)將回調(diào)該方法當(dāng)Visitor對象訪問命名空間時(shí)回調(diào)該方法當(dāng)Visitor對象訪問處理指令時(shí)回調(diào)該方法當(dāng)Visitor對象訪問文檔內(nèi)容時(shí)將回調(diào)該方法

visit(Commentnode)visit(Documentdocument)visit(DocumentTypedocumentType)visit(Elementnode)visit(Entitynode)visit(Namespacenamespace)visit(ProcessingInstructionnode)visit(Textnode)

dom4j解析XML文檔

classYeekuVistorextendsVisitorSupport{privateStringcurrentElement;//保存當(dāng)前正在處理的節(jié)點(diǎn)//當(dāng)Visitor訪問元素時(shí)回調(diào)該方法publicvoidvisit(Elementnode){if(node.isTextOnly)//假如節(jié)點(diǎn)內(nèi)容全部是文本{System.out.println(node.getName+元素的值是:+node.getText);}currentElement=node.getName;}//當(dāng)Visitor訪問屬性時(shí)回調(diào)該方法publicvoidvisit(Attributenode){System.out.println(currentElement+元素的+node.getName+屬性的值是:+node.getText);}//當(dāng)Visitor訪問處理指令時(shí)回調(diào)該方法publicvoidvisit(ProcessingInstruc

tionnode){System.out.println(處理指令+node.getTarget+的內(nèi)容是:+node.getText);}}

dom4j解析XML文檔

publicclassVisitorRead{publicstaticvoidmain(Stringargs)throwsException{SAXReaderreader=newSAXReader;Documentdoc=reader.read(newFile(book.xml));//使用訪問

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論