使用Quick在Java對象和XML之間進行轉換

將 Java 對象與 XML 數據集成

級別:中級

Brett McLaughlin(brett@oreilly.com)

作家兼編輯,O′Reilly and Associates

Quick 是一種開放源碼數據綁定框架,著重于運行時轉換。這篇介紹性文章向您演示了如何使用這種框架來快速且方便地將您的 Java 數據轉換成 XML 文檔,而無需其它數據綁定框架所需的類生成語義。本文還包括了大量的代碼樣本。

近幾年來,XML 的確給編程世界帶來了巨大沖擊。然而,XML 應用程序的複雜性(從一開始就很複雜)在最近幾年中並沒有減少多少。開發人員仍要花幾個星期的時間(即使不是幾個月)來學習複雜的 XML 語義和 API(如 SAX 和 DOM)來操作 XML。然而,在過去的 6 個月到 12 個月中,相對于那些較複雜的 API,另一種新的比較簡單的 XML API(稱爲 Quick)已經越來越受到歡迎。

數據綁定答應您直接在 Java 對象和 XML 之間映射,而不必處理 XML 屬性和元素。另外,它答應 Java 開發人員使用 XML,而無需花時間去鑽研 XML 規範。Quick 是這樣一種數據綁定 API,它是使 Java 應用程序適合業務用途的項目。

安裝與設置

在鑽研使用 Quick 的細節之前,您需要下載和安裝該項目。請訪問 Quick 的網站(請參閱參考資料),然後選擇 Download。然後,您可以下載該項目的 .zip 文件;在我寫本文時,最新的可用版本是 Quick 4.3.1,可通過 Quick4.3.1.zip 文件得到。

解壓縮 .zip 文件以創建 Quick 分發版(distribution)。清單 1 顯示了目錄層次結構:

清單 1. Quick 目錄結構

Quick4

+-- JARs

+-- BATs

+-- Doc

+-- dtdParserSrc

+-- DTDs

+-- examples

+-- JARs

+-- QDMLs

+-- QJMLs

+-- quickSrc

+-- UTILs

+-- utilSrc

+-- XSLs

開發人員最關注的兩個目錄是 Quick4/BATs(它應該被添加到 PATH 環境變量)和 Quick4/JARs(它包含應該被添加到 CLASSPATH 環境變量的 jar 文件)。明確地講,您需要將 dtdparser115.jar、Quick4rt.jar 和 Quick4util.jar 添加到當前類路徑中。您還需要一個 SAX 解析器實現,如 Apache 項目的 Xerces-J(請參閱參考資料)。同樣,將 xerces.jar 或您自己喜愛的解析器添加到類路徑中。

Java 類和 XML 文檔

數據綁定將集中于 XML 和 Java,所以讓我們研究如何把這些 XML 文檔和 Java 類與 Quick 聯系起來。爲了說明這些問題,讓我們研究幾個簡單的 Java 類和一個簡單的 XML 文檔。

簡單的 XML 文檔

首先,清單 2 顯示了一個小的 XML 文檔。我已經使事情簡單化,因此您讀完 10 個或 15 個 Java 類之後,不會不理解概念。

清單 2. 表示一個人的 XML

<?xml version="1.0"?>

<!DOCTYPE person SYSTEM "person.dtd">

<person>

<firstName>Gary</firstName>

<lastName>Greathouse</lastName>

<address type="home">

<street>10012 Townhouse Drive</street>

<city>Waco</city>

<state>TX</state>

<zipCode>76713</zipCode>

</address>

<phoneNumber>

<type>home</type>

<number>2545550287</number>

</phoneNumber>

<phoneNumber>

<type>work</type>

<number>2545556127</number>

</phoneNumber>

</person>

雖然清單 2 不是有關如何編寫 XML 的主要示例,但其中有幾個關于 Quick 的要點值得注重。您還需要研究清單 3 中所示文檔的 DTD。

清單 3. person.xml 的 DTD

<!ELEMENT person (firstName, lastName, address+, phoneNumber+)>

<!ELEMENT firstName (#PCDATA)>

<!ELEMENT lastName (#PCDATA)>

<!ELEMENT address (street, city, state, zipCode)>

<!ATTLIST address

type (home work other) "home"

>

<!ELEMENT street (#PCDATA)>

<!ELEMENT city (#PCDATA)>

<!ELEMENT state (#PCDATA)>

<!ELEMENT zipCode (#PCDATA)>

<!ELEMENT phoneNumber (type, number)>

<!ELEMENT type (#PCDATA)>

<!ELEMENT number (#PCDATA)>

Java 類

在許多數據綁定實現中,您現在需要生成 Java 源文件來表示這種類型的 XML 文檔。

 
用java、msxml將xml轉換成html
Converting XML to HTML Using Sun's Java API for XML Processing and Microsoft's MSXML 3.0 APIBy Robert Galante --IntroductionThis article describes two solutions that I have employed in applications t...查看完整版>>用java、msxml將xml轉換成html
 
使用Java Swing 創建一個XML編輯器
  我想您一定對XML有所了解,說不定您現在還躍躍欲試想寫一段XML文本呢,可是現在能找到的跨平台的、免費的XML編輯器太少了。...查看完整版>>使用Java Swing 創建一個XML編輯器
 
使用XPathExpression類對XML進行排序
net_lover 如果你曾經使用過XSLT,當你需要對XML文檔中的字符串或數字進行排序時,你可能會習慣于使用xsl:sort元素,在進行xsl:for-each進行循環或用xsl:apply-templates調用模板時,這個元素的功能很方便,而且簡單...查看完整版>>使用XPathExpression類對XML進行排序
 
使用XmlSerializer 進行xml序列化
寫XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder)); TextWriter writer = new StreamWriter(filename);PurchaseOrder po=new PurchaseOrder();serializer.Serialize(writer, po);writer.Cl...查看完整版>>使用XmlSerializer 進行xml序列化
 
使用XmlSerializer 進行xml序列化
寫XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder)); TextWriter writer = new StreamWriter(filename);PurchaseOrder po=new PurchaseOrder();serializer.Serialize(writer, po);writer.Cl...查看完整版>>使用XmlSerializer 進行xml序列化