版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第9章 Java中的XML編程共十八頁(yè)9.1 使用(shyng)DOM解析XML解析器工廠類(lèi)DocumentBuilderFactory DocumentBuilderFactory類(lèi)是DOM中的解析器工廠類(lèi),開(kāi)發(fā)這要使用DOM操作XML首先必須需要建立一個(gè)(y )解析器工廠實(shí)例,以便利用這個(gè)工廠類(lèi)實(shí)例來(lái)獲得一個(gè)(y )具體的解析器對(duì)象。 示例代碼如下: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();解析器類(lèi)DocumentBuilder DocumentBuilder類(lèi)是DOM中的解析器類(lèi),開(kāi)發(fā)者可以使其從
2、XML文檔獲取DOM文檔實(shí)例。當(dāng)獲得一個(gè)解析器工廠類(lèi)對(duì)象后,使用它的靜態(tài)方法newDocumentBuilder()將可以獲得一個(gè)DOM解析器對(duì)象,示例代碼如下: DocumentBuilder db = dbf.newDocumentBuilder();共十八頁(yè)文檔樹(shù)模型(mxng)Document3-1Document對(duì)象代表(dibio)了一個(gè)XML文檔的樹(shù)模型。所有其它的Node,都以一定的順序包含在Document對(duì)象之內(nèi),排列成一個(gè)樹(shù)形的結(jié)構(gòu),以后所有的對(duì)XML文檔的操作,都與解析器無(wú)關(guān),直接在這個(gè)Document對(duì)象上進(jìn)行操作就可以了。共十八頁(yè)文檔樹(shù)模型(mxng)Documen
3、t3-2解析器類(lèi)DocumentBuilder的parse()方法接受一個(gè)(y )XML文檔名作為輸入?yún)?shù),將返回一個(gè)(y )Document實(shí)例 示例代碼:Document doc = db.parse(message.xml);此外還可以把要解析的XML文檔轉(zhuǎn)化為輸入流,然后將輸入流對(duì)象作為parse()方法的輸入?yún)?shù),以便DOM解析器解析它,示例代碼如下: InputStream is=new FileInputStream(message.xm); Document doc=db.parse(is);使用Document對(duì)象的getElementsByTagName()方法,可以得到一
4、個(gè)NodeList對(duì)象,一個(gè)Node對(duì)象代表了一個(gè)XML文檔中的一個(gè)標(biāo)簽元素,而NodeList對(duì)象所代表的是一個(gè)Node對(duì)象的列表。 下面示例代碼得到的是XML文檔中所有標(biāo)簽對(duì)應(yīng)的Node對(duì)象的一個(gè)列表。 NodeList nl = doc.getElementsByTagName(message);共十八頁(yè)文檔樹(shù)模型(mxng)Document3-3 除了查找(ch zho)節(jié)點(diǎn)工作之外,Document還包含了創(chuàng)建其它節(jié)點(diǎn)的方法,比如createAttribut()用來(lái)創(chuàng)建一個(gè)Attr對(duì)象。它所包含的主要的方法有:createAttribute(String):用給定的屬性名創(chuàng)建一個(gè)At
5、tr對(duì)象,并可在其后使用setAttributeNode方法來(lái)放置在某一個(gè)Element對(duì)象上面。createElement(String):用給定的標(biāo)簽名創(chuàng)建一個(gè)Element對(duì)象,代表XML文檔中的一個(gè)標(biāo)簽,然后就可以在這個(gè)Element對(duì)象上添加屬性或進(jìn)行其它的操作。 createTextNode(String):用給定的字符串創(chuàng)建一個(gè)Text對(duì)象,Text對(duì)象代表了標(biāo)簽或者屬性中所包含的純文本字符串。如果在一個(gè)標(biāo)簽內(nèi)沒(méi)有其它的標(biāo)簽,那么標(biāo)簽內(nèi)的文本所代表的Text對(duì)象是這個(gè)Element對(duì)象的唯一子對(duì)象。 getElementsByTagName(String):返回一個(gè)NodeLis
6、t對(duì)象,它包含了所有給定標(biāo)簽名字的標(biāo)簽。 getDocumentElement():返回一個(gè)代表這個(gè)DOM樹(shù)的根節(jié)點(diǎn)的Element對(duì)象,也就是代表XML文檔根元素的那個(gè)對(duì)象。共十八頁(yè)節(jié)點(diǎn)(ji din)列表類(lèi)NodeList節(jié)點(diǎn)列表類(lèi)NodeList就是代表了一個(gè)包含一個(gè)或者多個(gè)Node的列表。可以簡(jiǎn)單(jindn)的把它看成一個(gè)Node的數(shù)組,可以通過(guò)下列方法來(lái)獲得列表中的元素:GetLength():返回列表的長(zhǎng)度。 Item(int):返回指定位置的Node對(duì)象??梢允褂肗odeList對(duì)象的item()方法來(lái)得到列表中的每一個(gè)Node對(duì)象 共十八頁(yè)節(jié)點(diǎn)(ji din)類(lèi)Node2-1
7、Node對(duì)象代表了文檔樹(shù)中的一個(gè)抽象的節(jié)點(diǎn)。Node對(duì)象所包含的主要的方法有:appendChild(org.w3c.dom.Node):為這個(gè)節(jié)點(diǎn)添加一個(gè)子節(jié)點(diǎn),并放在所有子節(jié)點(diǎn)的最后,如果這個(gè)子節(jié)點(diǎn)已經(jīng)存在,則先把它刪掉再添加進(jìn)去。 getFirstChild():如果節(jié)點(diǎn)存在子節(jié)點(diǎn),則返回(fnhu)第一個(gè)子節(jié)點(diǎn),對(duì)等的,還有g(shù)etLastChild()方法返回(fnhu)最后一個(gè)子節(jié)點(diǎn)。 getNextSibling():返回在DOM樹(shù)中這個(gè)節(jié)點(diǎn)的下一個(gè)兄弟節(jié)點(diǎn),對(duì)等的,還有g(shù)etPreviousSibling()方法返回其前一個(gè)兄弟節(jié)點(diǎn)。 getNodeName():根據(jù)節(jié)點(diǎn)的類(lèi)型返
8、回節(jié)點(diǎn)的名稱(chēng)。 getNodeType():返回節(jié)點(diǎn)的類(lèi)型。 getNodeValue():返回節(jié)點(diǎn)的值。 共十八頁(yè)節(jié)點(diǎn)(ji din)類(lèi)Node2-2hasChildNodes():判斷是不是存在有子節(jié)點(diǎn)。 hasAttributes():判斷這個(gè)節(jié)點(diǎn)是否存在有屬性(shxng)。 getOwnerDocument():返回節(jié)點(diǎn)所處的Document對(duì)象。 insertBefore(org.w3c.dom.Node new,org.w3c.dom.Node ref):在給定的一個(gè)子對(duì)象前再插入一個(gè)子對(duì)象。removeChild(org.w3c.dom.Node):刪除給定的子節(jié)點(diǎn)對(duì)象。rep
9、laceChild(org.w3c.dom.Node new,org.w3c.dom.Node old):用一個(gè)新的Node對(duì)象代替給定的子節(jié)點(diǎn)對(duì)象。要提取message標(biāo)簽內(nèi)的內(nèi)容,通常會(huì)使用Node對(duì)象的getNodeValue()方法:共十八頁(yè)元素(yun s)類(lèi)Element Element對(duì)象所包含(bohn)的主要的方法有:getElementsByTagName(String):返回一個(gè)NodeList對(duì)象,它包含了在這個(gè)標(biāo)簽中其下的子孫節(jié)點(diǎn)中具有給定標(biāo)簽名字的標(biāo)簽。getTagName():返回一個(gè)代表這個(gè)標(biāo)簽名字的字符串。 getAttribute(String):返回標(biāo)簽中
10、給定屬性名稱(chēng)的屬性的值。在這兒需要主要的是,應(yīng)為XML文檔中允許有實(shí)體屬性出現(xiàn),而這個(gè)方法對(duì)這些實(shí)體屬性并不適用。這時(shí)候需要用到getAttributeNodes()方法來(lái)得到一個(gè)Attr對(duì)象來(lái)進(jìn)行進(jìn)一步的操作。 getAttributeNode(String):返回一個(gè)代表給定屬性名稱(chēng)的Attr對(duì)象。共十八頁(yè)屬性(shxng)類(lèi)AttrAttr對(duì)象代表了某個(gè)標(biāo)簽中的屬性。Attr繼承于Node,但是因?yàn)锳ttr實(shí)際上是包含在Element中的,它并不能被看作是Element的子對(duì)象,因而在DOM中Attr并不是DOM樹(shù)的一部分Attr其實(shí)是被看作包含它的Element對(duì)象的一部分,它并不作為
11、DOM樹(shù)中單獨(dú)的一個(gè)節(jié)點(diǎn)出現(xiàn)。這一點(diǎn)(y din)在使用的時(shí)候要同其它的Node子對(duì)象相區(qū)別。共十八頁(yè)9.2 使用(shyng)SAX解析XMLSAX是事件驅(qū)動(dòng)的,SAX解析的方式非常類(lèi)似流媒體的分析處理方式,這種解析模式能夠隨著文檔的讀入過(guò)程立即開(kāi)始解析,而不需要等待文檔中所有的數(shù)據(jù)被讀入結(jié)束后再開(kāi)始解析。適合于內(nèi)存較小的應(yīng)用場(chǎng)合。除此之外,應(yīng)用程序甚至不必解析整個(gè)文檔,它可以在某個(gè)條件得到滿(mǎn)足時(shí)停止解析后面的文檔。SAX解析XML文檔的基本原理為:首先獲得一個(gè)實(shí)現(xiàn)SAX接口的解析器,然后編寫(xiě)一個(gè)符合SAX標(biāo)準(zhǔn)的處理器類(lèi),并且把這個(gè)類(lèi)注冊(cè)(zhc)到剛生成的解析器,然后開(kāi)始解析XML文件,解
12、析器會(huì)把XML文檔作為一個(gè)流讀出來(lái),并將文件流轉(zhuǎn)換成一個(gè)事件流,最后根據(jù)事件調(diào)用定義在解析器里的事件處理方法對(duì)流中的事件做出響應(yīng)。共十八頁(yè)SAX的事件驅(qū)動(dòng)模型(mxng) 共十八頁(yè)Java SAX的API SAXParserFactory:一個(gè)根據(jù)系統(tǒng)屬性生成parser實(shí)例的解析器工廠類(lèi)。其功能與DOM中的DocumentBuilderFactory類(lèi)相同。SAXParser:一個(gè)定義了不同種類(lèi)的parser()方法的接口。SAXParser是一個(gè)與SAX事件通訊的處理器,可以使用自定義的handler來(lái)處理事件。SAXReader:SAXParser中包含了一個(gè)SAXReader,當(dāng)要使用
13、SAXReader的getXMLReader()方法的時(shí)候就需要配置它。DefaultHandler:類(lèi)DefaultHandler實(shí)現(xiàn)了ContentHandler、ErrorHandler、DTDHandler和EntityResolver接口,通過(guò)繼承這個(gè)類(lèi),我們(w men)可以實(shí)現(xiàn)解析XML文檔的所有任務(wù)。ContentHandler:當(dāng)遇到XML文檔中的標(biāo)簽時(shí),就將會(huì)調(diào)用這個(gè)接口中的startDocument、endDocument、startElement和 endElement 方法。當(dāng)遇到XML文檔中的元素內(nèi)容時(shí),將調(diào)用characters方法。ErrorHandler:當(dāng)遇
14、到不同類(lèi)型的錯(cuò)誤的時(shí)候分別調(diào)用相應(yīng)的錯(cuò)誤方法,這些方法包括:error、fatalError和warning等。DTDHandler:該接口所定義的方法只用在處理DTD信息的時(shí)候。EntityResolver:該接口中的resolveEntity方法只在遇到URI標(biāo)識(shí)數(shù)據(jù)的時(shí)候才調(diào)用。共十八頁(yè)9.3 使用(shyng)JDOM解析XMLJDOM是一個(gè)開(kāi)源項(xiàng)目,它基于樹(shù)型結(jié)構(gòu),利用純Java的技術(shù)對(duì)XML文檔實(shí)現(xiàn)解析、生成、序列化以及多種操作。JDOM直接為Java編程服務(wù)。它利用更為強(qiáng)有力的Java語(yǔ)言的諸多特性(方法重載、集合概念以及映射),把SAX和DOM的功能有效(yuxio)地結(jié)合起來(lái)
15、。JDOM中的類(lèi)主要包括SAXBuilder、DOMBuilder、Document、XMLOutputter、Element和Attribute等 共十八頁(yè)JDOM的API 2-1SAXBuilder類(lèi) JDOM中的SAXBuilder類(lèi)會(huì)使用SAX來(lái)建立一個(gè)JDOM的解析樹(shù)。它可以通過(guò)build()方法由指定的輸入數(shù)據(jù)流建立一個(gè)文件,返回一個(gè)Document對(duì)象。DOMBuilder類(lèi) JDOM中的DOMBuilder類(lèi)會(huì)使用DOM來(lái)建立一個(gè)JDOM的解析樹(shù)。它可以通過(guò)build()方法由指定的輸入數(shù)據(jù)流建立一個(gè)文件,返回一個(gè)Document對(duì)象。Document類(lèi) Document類(lèi)的一
16、個(gè)實(shí)例用來(lái)描述一個(gè)XML文檔。這個(gè)文檔類(lèi)是輕量級(jí)的,它可以包括文檔類(lèi)型、處理指令對(duì)象、根元素和注釋(zhsh)對(duì)象等內(nèi)容。共十八頁(yè)JDOM的API 2-2XMLOutPutter類(lèi) 將XML文檔寫(xiě)入一個(gè)特定的OutputStream流中。其中output()方法用于將XML文檔輸出到指定的位置,既可以是標(biāo)準(zhǔn)的輸出System.out,也可以是File對(duì)象或者OutputStream對(duì)象。Element類(lèi) 在JDOM中,XML元素就是Element類(lèi)的實(shí)例。Element類(lèi)有兩種主要的操作,一個(gè)是瀏覽元素樹(shù),另一個(gè)是移動(dòng)元素。Attribute類(lèi) 可以使用Element類(lèi)的getAttribute()方法來(lái)取得一個(gè)元素的屬性,該方法會(huì)返回一個(gè)Attribute對(duì)象。Attribute類(lèi)提供了getValue()方法,它將會(huì)以字符串的形式返回一個(gè)屬性值。例如通過(guò)下面(xi mian)代碼可以得到name元素的屬性值:共十八頁(yè)9.4 本章(bn zhn)小結(jié)本章(bn zhn)主要介紹了Java XML程序設(shè)計(jì)的基礎(chǔ)知識(shí),詳細(xì)講解了DOM編程、SAX編程和JDOM編程的基本流程和常用方法共十八頁(yè)內(nèi)容摘要第9章 Java中的XML編程。DocumentBuilder類(lèi)是DOM中的解
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 牡蠣科普教學(xué)課件
- 2026年及未來(lái)5年中國(guó)AI教育行業(yè)市場(chǎng)深度分析及未來(lái)發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 《EJT 1100-1999 X射線(xiàn)熒光測(cè)井儀》專(zhuān)題研究報(bào)告深度
- 《GAT 2045-2023法庭科學(xué) 疑似易制毒化學(xué)品中1-苯基-2丙酮等8種物質(zhì)檢驗(yàn) 氣相色譜-質(zhì)譜和液相色譜法》專(zhuān)題研究報(bào)告
- 情報(bào)分析在商業(yè)決策中的必要性
- 企業(yè)創(chuàng)新中的服務(wù)創(chuàng)新管理流程
- 生理學(xué)核心概念:炎癥介質(zhì)生理作用課件
- 城鎮(zhèn)生活污水處理項(xiàng)目申請(qǐng)報(bào)告
- 磷礦采選工程投標(biāo)書(shū)
- 市政污泥處置及污泥再利用項(xiàng)目商業(yè)計(jì)劃書(shū)
- 金融領(lǐng)域人工智能算法應(yīng)用倫理與安全評(píng)規(guī)范
- 2026長(zhǎng)治日?qǐng)?bào)社工作人員招聘勞務(wù)派遣人員5人備考題庫(kù)及答案1套
- 機(jī)動(dòng)車(chē)駕校安全培訓(xùn)課件
- 河道清淤作業(yè)安全組織施工方案
- 2025年役前訓(xùn)練考試題庫(kù)及答案
- 2026年七臺(tái)河職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 2021海灣消防 GST-LD-8318 緊急啟停按鈕使用說(shuō)明書(shū)
- 煙花爆竹零售經(jīng)營(yíng)安全責(zé)任制度
- 2023年和田地區(qū)直遴選考試真題匯編含答案解析(奪冠)
- ICG熒光導(dǎo)航在肝癌腹腔鏡解剖性肝切除中的應(yīng)用2026
- 城市軌道交通服務(wù)與管理崗位面試技巧
評(píng)論
0/150
提交評(píng)論