版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年上海煙草機(jī)械有限責(zé)任公司招聘16人參考考試題庫附答案解析
- 電石爐安全生產(chǎn)管理制度
- 線路板生產(chǎn)安全管理制度
- 安全生產(chǎn)四級(jí)責(zé)任制度
- 印刷安全生產(chǎn)責(zé)任制度
- 2026鷹潭月湖恒通村鎮(zhèn)銀行春季員工招聘備考考試試題附答案解析
- 紅薯生產(chǎn)期澆水管理制度
- 合作生產(chǎn)管理制度范本
- 面筋生產(chǎn)管理制度范本
- 2026江蘇南京大學(xué)XZ2026-011地球科學(xué)與工程學(xué)院秘書招聘備考考試題庫附答案解析
- 長護(hù)險(xiǎn)人員管理培訓(xùn)制度
- 2026河南大學(xué)附屬中學(xué)招聘77人備考題庫附答案
- 網(wǎng)絡(luò)安全運(yùn)維與管理規(guī)范(標(biāo)準(zhǔn)版)
- 2026年包頭職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性考試模擬試題含答案解析
- 2026年XX醫(yī)院兒科護(hù)理工作計(jì)劃
- 2025-2026學(xué)年貴州省安順市多校高一(上)期末物理試卷(含答案)
- 呼吸機(jī)相關(guān)肺炎預(yù)防策略指南2026
- 妊娠期缺鐵性貧血中西醫(yī)結(jié)合診療指南-公示稿
- 北京市2025年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷三套及答案
- 2026年上海理工大學(xué)單招職業(yè)適應(yīng)性測試題庫附答案
- TCEC電力行業(yè)數(shù)據(jù)分類分級(jí)規(guī)范-2024
評(píng)論
0/150
提交評(píng)論