抱歉,小弟最近較為忙碌,一直抽不出空來撰寫 心得報告。其實最近在xml方面有一項很有趣的技術正式 進入beta,這項技術大幅度的改變了以往xml parsing偏向 文件架構處理模式,變得更為直觀了。這項技術叫做JAXB (Java Architecture for XML Binding),蠻有趣的,大家參考看看。 JAXB這項技術的原理是,讓programmer不用care文件架構 的問題,而是將xml文件直接轉換成物件,舉例來說,對於某個 attribute "Year",我們可以直接呼叫該物件的getYear()函式,而不用 像以前一樣一層一層的去處理NodeList等JAXP的問題。事實上, 不論是DOM或是SAX的parsing,大部分的程式碼都是一直在重複 的,現在省去這一層,當然可以大大的精簡程式碼和開發時程。 底下我們介紹JAXB的運作方式: 首先,我們先寫好將來要parsing的文件的xml schema,接著, 我們利用%JAXB_HOME%\bin\xjc這個工具來編譯我們的schema, 語法如下 xjc -p -d schema_file JAXB的編譯器會從我們的schema產生對應的java檔案,這些檔案中, 請特別注意xxx.java和xxxType.java,這些interface是對應於schema中的 schema所產生的,裡面包含了之後我們能使用的函式。接著,在我們 的測試函式中可以這樣使用: JAXBContext jc = JAXBContext.newInstance( "books" ); //books是我們在xjc時所指定的package name Unmarshaller u = jc.createUnmarshaller(); Books books=(Books)(u.unmarshal( new FileInputStream("Books.xml" ))); //Books是我們的root element java.util.List booklist=books.getBook(); Book book=(Book)(booklist.get(0)); System.out.println(book.getYear()); System.out.println(book.getAuthor().getValue()); System.out.println(book.getTitle().getValue()); //Book element有attribute Year //以及child element Author和Title 這樣方便很多,不過要注意一點,如果我們的schema有任何更改, 那麼整個程序就要重新執行一遍了。 最後列出來的是我所設計的ant build file,供大家參考: ----------------------------------------------------------------------------------------- JAXB test build file