JDOM_簡化_XML_編程



《JDOM_簡化_XML_編程》由會員分享,可在線閱讀,更多相關(guān)《JDOM_簡化_XML_編程(8頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、JDOM 簡化 XML 編程作為開發(fā)人員,您可能聽說過 80-20 規(guī)則,在其它領(lǐng)域被稱為 Pareto 法則:一種過程或方法能適應(yīng)所有可能情況的 80%,另外的 20%則需要根據(jù)具體情況來處理。軟件開發(fā)的必然結(jié)果是:對于開發(fā)人員而言,有了給定的技術(shù)后就能非常容易地完成可能要做的工作的 80%。當(dāng)然,軟件產(chǎn)品和標(biāo)準(zhǔn)并不總是根據(jù) 80-20 規(guī)則發(fā)展的。特別的,Java XML 的缺陷就是這條規(guī)則的一個例外。Java 的編程世界擁有很多的 API-一些是自己開發(fā)的,一些是由幾個大公司開發(fā)并被制定為標(biāo)準(zhǔn)的-他們提供了解決特殊XML 任務(wù)的成熟解決方案。作為 XML 普遍性的證明,每個新任務(wù)都存在著
2、一種新技術(shù),但如何將它們結(jié)合在一起,又如何尋找一種合適的工具去完成必須重復(fù)做的任務(wù)中的 80%-利用 Java 語言的直觀映象的基本 XML 樹操作?JDOM 正好是用來解決上述問題的一個 XML API。標(biāo)記:Java 和 XML 在許多方面,Java 語言已變成供 XML 選擇的一種編程語言。由于 Apache 軟件基金會和 IBM alphaWorks 所做的開創(chuàng)性工作,現(xiàn)在已有完整的工具鏈用于創(chuàng)建,操作,傳送文檔和對 XML 文檔進(jìn)行語法分析。但是,雖然許多 Java 開發(fā)人員每天都在使用 XML,Sun 卻在將 XML 整合進(jìn)Java 平臺方面落后了。因為在 XML 成為從商家對商家
3、集成到 Web 站點內(nèi)容流水化等方面的關(guān)鍵技術(shù)之前,Java 2 平臺就已經(jīng)非常流行了。Sun 已經(jīng)使用 JSR 過程使之成為現(xiàn)存 XML API 的鼻祖,這一點已被廣泛接受。目前最顯著的是加入了 JAXP(用于 XML 語法分析的 Java API),其中包含了三個軟件包:?org.w3c.dom,W3C 推薦的用于 XML 標(biāo)準(zhǔn)規(guī)劃文檔對象模型的 Java 工具?org.xml.sax,用于對 XML 進(jìn)行語法分析的事件驅(qū)動的簡單 API?javax.xml.parsers,工廠化工具,允許應(yīng)用程序開發(fā)人員獲得并配置特殊的語法分析器工具盡管對于 Java 開發(fā)人員而言,有了這些軟件包是件好
4、事,但它僅僅代表獲得了現(xiàn)有 API 標(biāo)準(zhǔn)的正式許可而已,并沒有在提供一流的 Java-XML 互操作性方面取得了巨大飛躍。核心 Java 平臺所缺乏的是將 XML 文檔作為 Java 對象操作的直觀接口。進(jìn)入 JDOM。JDOM 是兩位著名的 Java 開發(fā)人員兼作者,Brett Mclaughlin 和Jason Hunter 的創(chuàng)作成果,2000 年初在類似于 Apache 協(xié)議的許可下,JDOM 作為一個開放源代碼項目正式開始研發(fā),JDOM 作為一個開放源代碼項目正式開始了。它已成長為包含來自廣泛的 Java 開發(fā)人員的投稿、集中反饋及錯誤修復(fù)的系統(tǒng),并致力于建立一個完整的基于 Java
5、 平臺的解決方案,通過 Java 代碼來訪問、操作并輸出 XML 數(shù)據(jù)?;仨撌走@是 JDOM 適合的 API、啞元JDOM 能夠替換 org.w3c.dom 軟件包來有計劃地操作 XML 文檔。它并不是一個簡單的替代品,實際上 JDOM 和 DOM 能夠愉快地并存。另外,盡管它提供的類的封裝從配置和運行分析器執(zhí)行中分擔(dān)了大量工作,但它不負(fù)責(zé)根據(jù)文本輸入來對 XML 進(jìn)行語法分析。JDOM 建立在現(xiàn)有的 API 的能力之上,正如項目網(wǎng)頁所表述的“一個更好的捕鼠器”。要理解需要備用 API 的原因,就要考慮 W3C DOM 設(shè)計的局限性:?語言獨立。DOM 并不是用人們心目中的 Java 語言設(shè)計
6、的。雖然這種方法保留了在不同語言中非常相似的 API,它也使那些習(xí)慣 Java 語言的程序員感到更麻煩。例如:Java 語言內(nèi)建了一種 String 類,而 DOM 則規(guī)范定義了自己的 Text 類。?嚴(yán)格的層次結(jié)構(gòu)。DOM API 直接沿襲了 XML 規(guī)范。在 XML 中,每件東西都是一個結(jié)點,因此您能在 DOM 中找到一個幾乎每件東西都可以擴展的基于 Node 的接口和返回 Node 的一系列方法。就多態(tài)性的觀點來講,它是優(yōu)秀的,但鑒于如上解釋,它在 Java 語言中的應(yīng)用是困難而且不便的,其中從 Node 向葉類型作顯式下拉會導(dǎo)致代碼的冗長和難以理解。?接口驅(qū)動。公共 DOM API 僅
7、由接口組成(Exception 類是一個例外,但恰恰足夠了)。w3c 對提供實現(xiàn)并不感興趣,它只對定義接口(比較有意義)感興趣。但它也意味著作為 Java 程序員使用 API 在創(chuàng)建 XML 對象時增加了分散程度,因為 w3c 標(biāo)準(zhǔn)大量使用工廠化的類和類似的靈活的但不直接的模式。在某些應(yīng)用中,XML 文檔是僅由語法分析器建立的,而從不會由應(yīng)用程序級代碼建立,這是不相關(guān)的。但是,隨著 XML 更廣泛的使用,并不是所有問題都繼續(xù)需要由語法分析器來驅(qū)動。應(yīng)用程序的開發(fā)人員需要一個更方便的方法有計劃地構(gòu)造 XML 對象。對于程序員,這些約束意味著龐大(在內(nèi)存占用和接口大小方面)的和難掌握的API,學(xué)習(xí)
8、和使用都很難。相反,JDOM 是作為一種輕量級 API 被制定的,最主要的是它是以 Java 為中心的。它在遵循 DOM 主要規(guī)則的基礎(chǔ)上除去了上述缺點:?JDOM 是 Java 平臺專用的。只要有可能,API 都使用 Java 語言的內(nèi)建String 支持,因此文本值也適用于 String。它還可利用 Java 2 平臺的類集,如 List 和 Iterator,給程序員提供了一個豐富的并且和 Java 語言類似的環(huán)境。?沒有層次性。在 JDOM 中,XML 元素就是 Element 的實例,XML 屬性就是 Attribute 的實例,XML 文檔本身就是 Document 的實例。由于在
9、 XML 中所有這些都代表了不同的概念,因此它們總是作為自己的類型被引用,而不是作為一個含糊的“結(jié)點”。?類驅(qū)動。因為 JDOM 對象就是像 Document、Element 和 Attribute 這些類的直接實例,因此創(chuàng)建一個新 JDOM 對象就如在 Java 語言中使用new 操作符一樣容易。它還意味著不需要進(jìn)行工廠化接口配置-JDOM 的使用是直截了當(dāng)?shù)?。回頁首看,沒有 Node:建立和操作 JDOM 文檔JDOM 使用標(biāo)準(zhǔn)的 Java 編碼模式。只要有可能,它使用 Java new 操作符而不用復(fù)雜的工廠化模式,使對象操作即便對于初學(xué)用戶也很方便。例如,讓我們看一下如何隨便使用 JD
10、OM 建立一個簡單的 XML 文檔。我們將要建立的結(jié)構(gòu)如清單 1 所示。(從參考資料 上可下載關(guān)于本文的完整代碼)清單 1.建立 XML 文檔樣本 Toyota Celica 1997 green 1ABC234 注意:我們將建立示例文檔,在下面的清單 2 到清單 7 中有詳細(xì)描述。開始,讓我們先創(chuàng)建一個根元素,并將其添加到文檔中:清單 2.創(chuàng)建一個 Document Element carElement=new Element(car);Document myDocument=new Document(carElement);這一步創(chuàng)建一個新 org.jdom.Element,并將其作為 o
11、rg.jdom.Document myDocument 的根元素。(如果您使用參考資料 中提供的樣本代碼,請務(wù)必導(dǎo)入org.jdom.*。)因為一個 XML 文檔必須一直有一個唯一的根元素,所以Document 將 Element 放在它的構(gòu)造器中。下一步,添加 vin 屬性:清單 3.添加一個 Attribute carElement.addAttribute(new Attribute(vin,123fhg5869705iop90);添加元素也是很簡單的。這里我們添加 make 元素:清單 4.元素和子元素Element make=new Element(make);make.addCon
12、tent(Toyota);carElement.addContent(make);由于 Element 的 addContent 方法返回 Element,我們也可以這樣寫:清單 5.用簡潔形式添加元素carElement.addContent(new Element(make).addContent(Toyota);這兩個語句完成了相同的工作。有些人認(rèn)為第一個示例可讀性更好,但是如果您一次建立許多元素,您會覺得第二個示例可讀性更好。要完成構(gòu)建文檔:清單 6.添加其余的元素carElement.addContent(new Element(model).addContent(Celica);c
13、arElement.addContent(new Element(year).addContent(1997);carElement.addContent(new Element(color).addContent(green);carElement.addContent(new Element(license).addContent(1ABC234).addAttribute(state,CA);您會注意到對于 license 元素,我們不但添加了元素的內(nèi)容,還為其添加了一個屬性,表明許可已被發(fā)出了這個狀態(tài)。這是因為 Element 的 addContent 方法總是返回 Element 本
14、身,而不是一個無效的聲明。用同樣的方法添加注釋部分或其它標(biāo)準(zhǔn) XML 類型:清單 7.添加一條注釋carElement.addContent(new Comment(Description of a car);操作文檔也是用類似方式。例如,要引用 year 元素,我們使用 Element 的getChild 方法:清單 8.訪問子元素Element yearElement=carElement.getChild(year);該語句實際上將返回第一個元素名為 year 的子 Element。如果沒有 year 元素,則調(diào)用返回一個空值。注意,我們不必回溯來自任何類似于 DOM Node 接口的返
15、回值 -Element 的子元素就是 Element。用類似的方式,我們可把 year 元素從文檔中除去:清單 9.除去子元素boolean removed=carElement.removeChild(year);這次調(diào)用將只除去 year 元素;文檔的其余部分保持不變。到目前為止,我們已經(jīng)涵蓋了文檔的生成和操作。要將完成的文檔輸出至控制臺,可使用 JDOM 的 XMLOutputter 類:清單 10.將 JDOM 轉(zhuǎn)化為 XML 文本try XMLOutputter outputter=new XMLOutputter(,true);outputter.output(myDocument
16、,System.out);catch(java.io.IOException e)e.printStackTrace();XMLOutputter 有幾個格式選項。這里我們已指定希望子元素從父元素縮進(jìn)兩個空格,并且希望元素間有空行。XMLOutputter 可輸出到 Writer 或OutputStream。為輸出到文件,我們可以簡單地將輸出行簡化為:清單 11.使用 FileWriter 輸出 XML FileWriter writer=new FileWriter(/some/directory/myFile.xml);outputter.output(myDocument,writer)
17、;writer.close();回頁首與其它方法良好協(xié)作:和現(xiàn)有的 XML 工具進(jìn)行互操作JDOM 的一個有趣特征是和其它 API 有互操作性。使用 JDOM,不僅能把文檔輸出到 Stream 或 Reader,還可將文檔作為 SAX Event Stream 或作為 DOM Document。這種靈活性允許 JDOM 能在多種環(huán)境下使用或被添加到已經(jīng)在使用另一種方法處理 XML 的系統(tǒng)中去。正如我們在后面一個示例中所看到的,它還允許 JDOM 使用其它的還不能識別 JDOM 的數(shù)據(jù)結(jié)構(gòu)的 XML 工具。JDOM 的另一個用處是它能夠讀取并操作現(xiàn)有的 XML 數(shù)據(jù)。使用org.jdom.inp
18、ut 中的一個類可以閱讀結(jié)構(gòu)很規(guī)范的 XML 文件。在這個示例中我們使用 SAXBuilder:清單 12.使用 SAXBuilder 對 XML 文件進(jìn)行語法分析try SAXBuilder builder=new SAXBuilder();Document anotherDocument=builder.build(new File(/some/directory/sample.xml);catch(JDOMException e)e.printStackTrace();catch(NullPointerException e)e.printStackTrace();您可以用清單 2 到清
19、單 7 中顯示的方法來操作通過這個過程建立的文檔。JDOM 的另一個實用應(yīng)用程序?qū)⑵渑c Apache 的 Xalan 產(chǎn)品結(jié)合在一起(請參閱參考資料)。使用上面的汽車示例,我們將為在線汽車經(jīng)銷商建立一個 Web 頁面,顯示特定汽車的詳細(xì)信息。首先,假設(shè)我們上面建立的文檔顯示我們準(zhǔn)備呈現(xiàn)給用戶的汽車的信息。下一步,我們將把這個 JDOM Document 與一個 XSL 樣式表結(jié)合起來并把 HTML 格式的結(jié)果輸出到 servlet 的 OutputStream 上以便在用戶的瀏覽器中顯示。在本例中,我們準(zhǔn)備使用的 XSL 樣式表被稱為 car.xsl:清單 13.用于將汽車記錄轉(zhuǎn)換為 HTML
20、 的 XSL 文檔 VIN:Year:Color:現(xiàn)在我們將把 org.jdom.Document 轉(zhuǎn)換為 DOM Document,并將其與顯示我們的 XSL 和 OutputStream 的文件一起提供給 Xalan,OutputStream 是我們從我們假定的使用 servlet(如清單 14 所示)的應(yīng)用服務(wù)器上獲取的。清單 14.使用 JDOM 和 Xalan 創(chuàng)建 HTML 文檔TransformerFactory tFactory=TransformerFactory.newInstance();/Make the input sources for the XML and XS
21、LT documents org.jdom.output.DOMOutputter outputter=new org.jdom.output.DOMOutputter();org.w3c.dom.Document domDocument=outputter.output(myDocument);javax.xml.transform.Source xmlSource=new javax.xml.transform.dom.DOMSource(domDocument);StreamSource xsltSource=new StreamSource(new FileInputStream(/s
22、ome/directory/car.xsl);/Make the output result for the finished document using /the HTTPResponse OutputStream StreamResult xmlResult=new StreamResult(response.getOutputStream();/Get a XSLT transformer Transformer transformer=tFactory.newTransformer(xsltSource);/Do the transform transformer.transform
23、(xmlSource,xmlResult);在這個示例中,輸出是通過 Java servlet 的 HTTPResponse OutputStream 流出。然而,輸出流可以象早期的使用 XMLOutputter 的實例一樣簡單的通過文件流輸出。我們使用 DOMOutputter 為 Xalan 生成 XML 源代碼。但是我們可以生成相同的輸出,方法是使用 XMLOutputter 將我們的 XML 文檔作為 String 輸出并使其進(jìn)入 StreamSource。說到靈活性:JDOM 可將它的結(jié)構(gòu)作為 String、SAX Event Stream 或 DOM Document 輸出。這允許 JDOM 與能把任何這些模型作為輸入的工具一起工作。(關(guān)于附加功能,請訪問 JDOM Web 站點的 contrib 包,在那里您將發(fā)現(xiàn)一個基于 JDOM 工具的寶庫,可提供基于 JDBC ResultSet 的構(gòu)建器、XPATH 實現(xiàn)方法和其它更多工具。)在短短幾行代碼中,JDOM 啟用了許多功能,我們已經(jīng)在 XML 中分析過并有計劃地創(chuàng)建了 XML 文檔,操作了那些文檔,并使用它們產(chǎn)生 XML 驅(qū)動的 Web 頁面。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 深入學(xué)習(xí)貫徹中央八項規(guī)定精神交流發(fā)言材料范文(三篇)
- 學(xué)習(xí)中央八項規(guī)定精神心得體會范文(三篇)
- 2024年度組織生活會個人“4個方面”對照檢查材料文稿
- 2024年組織生活會個人對照檢查發(fā)言材料(普通黨員)例文
- 2025年旅游業(yè)高質(zhì)量發(fā)展行動方案文稿
- 2025年機關(guān)組織生活會班子對照檢查材料范文
- 普通黨員2024年組織生活會個人發(fā)言提綱(圍繞“四個帶頭”方面)文稿
- 鄉(xiāng)班子領(lǐng)導(dǎo)干部2024年度民主生活會“四個帶頭”對照檢查發(fā)言材料文稿
- 2024年度黨員領(lǐng)導(dǎo)干部民主生活會整改落實方案例文
- 關(guān)于2024年度民主生活會個人問題的整改方案例文
- 2025年醫(yī)療保障工作要點范文
- 青年人才“育苗蹲苗”培養(yǎng)實施方案范文
- 2025駐村第一書記組織生活會對照檢查材料例文
- 國企公司2025年安全生產(chǎn)工作要點范文
- 2024年度國企個人組織生活會前準(zhǔn)備情況、上年度整改落實情況范文