JDOM 沒(méi)有精確地映射到 DOM 和 SAX,但可以容易地輸出到這兩者Brett McLaughlin
Enhydra 策略顧問(wèn), Lutris Technologies
2001 年 4 月
您正在學(xué)習(xí)如何使用 JDOM 嗎? 沒(méi)有哪一種 API不是孤立的,在本文中,您將了解如何輕易地從 JDOM 轉(zhuǎn)換到 SAX 和DOM,從而使用所有這三種 API 來(lái)對(duì) XML應(yīng)用程序流暢地編程。本文中的代碼樣本提供了從 JDOM 到 SAX 和 JDOM 到DOM 的轉(zhuǎn)換示例。
您可能和我一樣已經(jīng)跳上了 JDOM 這輛“彩車”。JDOM 易于使用(按照我較偏愛(ài)的 JDOM 作者之一的觀點(diǎn)來(lái)看),并很容易使 XML 和 Java 配合默契。即,如果我甚至建議 JDOM 可以替換 DOM 和 SAX 并成為唯一的 Java 和 XML API 的話,那我一定是一個(gè)傻瓜。對(duì)于 DOM、SAX 和 JDOM,有許多不同的應(yīng)用程序,而在基于 XML 的應(yīng)用中幾乎肯定會(huì)碰到所有這三種。至于 JDOM, 需要使您的合作者和管理者(他們也許沒(méi)有象您一樣走在最前沿)相信您可以使用 JDOM,而且還可以使程序與許多其它不使用 JDOM 的應(yīng)用交互。這意味著需要從 JDOM 轉(zhuǎn)換到 SAX 以及從 JDOM 轉(zhuǎn)換到 DOM。在本文中,我將向您展示如何去做這兩種轉(zhuǎn)換。
從 JDOM 到 SAX
在使用 SAX 時(shí),每一件事情都基于進(jìn)入的事件系列。SAX 程序員編寫(xiě)回調(diào)方法實(shí)現(xiàn)它們,是在發(fā)生這些各種事件時(shí)執(zhí)行的代碼片段。所有 SAX 語(yǔ)法分析的核心是 SAX org.xml.sax.ContentHandler
接口,它定義了回調(diào),該回調(diào)是 XML 文檔處理的一部分。除此以外, ErrorHandler
、 DTDHandler
和 EntityResolver
接口也很重要。一旦建立了這些接口的實(shí)現(xiàn),就可以將它們交給 org.jdom.output.SAXOutputter
類,而自己可以坐下來(lái)休息一會(huì)兒。清單 1 顯示了它是如何工作的,并提供給您一些可以參考的想法。
清單 1. 從 JDOM 到 SAX 的轉(zhuǎn)換public convertToSAX(Document jdomDoc) throws JDOMException { SAXOutputter outputter = new SAXOutputter(new MyContentHandlerImpl()); // Set the EntityResolver impl outputter.setEntityResolver(new MyEntityResolverImpl()); // Set the DTDHandler impl outputter.setEntityResolver(new MyDTDHandlerImpl()); // Set the ErrorHandler impl outputter.setEntityResolver(new MyErrorHandlerImpl()); // Fire the SAX events outputter.output(jdomDoc);}
|
從 JDOM 到 DOM
從 JDOM 結(jié)構(gòu)轉(zhuǎn)換到 DOM 結(jié)構(gòu)與上面的方法類似。事實(shí)上,它甚至比使用 SAX 還容易,因?yàn)?DOM 和 JDOM 有略微相似的結(jié)構(gòu)。這里沒(méi)有什么特別之處:正如使用 SAXOutputter
輸出到 SAX 一樣,您需要使用 org.jdom.output.DOMOutputter
類輸出到 DOM。清單 2 顯示了這個(gè)起作用的類。
清單 2. 從 JDOM 到 DOM 的轉(zhuǎn)換public org.w3c.dom.Document convertToDOM(org.jdom.Document jdomDoc) throws JDOMException { DOMOutputter outputter = new DOMOutputter(); return outputter.output(jdomDoc);}public org.w3c.dom.Element convertToDOM(org.jdom.Element jdomElement) throws JDOMException { DOMOutputter outputter = new DOMOutputter(); return outputter.output(jdomElement);}public org.w3c.dom.Attr convertToDOM(org.jdom.Document jdomAttribute) throws JDOMException { DOMOutputter outputter = new DOMOutputter(); return outputter.output(jdomAttribute);}
|
當(dāng)然,在 SAXOutputter
和 DOMOutputter
中,還有其它一些有幫助的方法,這里只是一些基本的。如果您讀過(guò)我所寫(xiě)的其它 XML 提示(請(qǐng)參閱“參考資料”),那么通過(guò)本文,您已知道如何使用 JDOM 以及如何把 JDOM 與接收 SAX 和 DOM 作為輸入的應(yīng)用程序和生成 SAX 和 DOM 的應(yīng)用程序一起使用。繼續(xù)學(xué)習(xí)并不斷積累新知識(shí),用 XML 的各種格式來(lái)交換 XML!
參考資料
關(guān)于作者 Brett McLaughlin ( brett@newInstance.com) 是 Lutris Technologies 的 Enhydra 策略顧問(wèn)和分布式系統(tǒng)體系結(jié)構(gòu)方面的專家。他是 Java 和 XML (O‘Reilly) 的作者。他還參加了,如 Java servlets、Enterprise JavaBeans 技術(shù)、XML 和商家對(duì)商家應(yīng)用等技術(shù)的研究。他與 Jason Hunter 一起建立了 JDOM 項(xiàng)目,該項(xiàng)目為在 JAVA 應(yīng)用程序中控制 XML 提供一個(gè)簡(jiǎn)單的 API。他還是 Apache Cocoon 項(xiàng)目和 EJBoss EJB 服務(wù)器的活躍開(kāi)發(fā)人員以及 Apache Turbine 項(xiàng)目的共同創(chuàng)建者。 |
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。