構建xml文檔

我須要從Java對象層次結構構建一個XML文檔。Java類和XML格式都是固定的。因此我不能使用像XStream這樣的XML序列化器:它將XML格式基於Java類。一樣,像JAXB這樣的Java XML綁定技術也不行,由於它從XML模式建立Java類[ed:但見下文]。我須要一個手動方法。html

低技術的StringBuilder路由會致使易碎和錯誤的代碼(至少對我來講!)。java

JAXPJDOM這樣的API能夠產生更健壯的代碼,但這些代碼很是冗長。安全

Groovy有一個優雅的MarkupBuilderruby

def writer = new StringWriter()複製代碼
def xml = new MarkupBuilder(writer)複製代碼
xml.records() {複製代碼
car(name:'HSV Maloo', make:'Holden', year:2006) {複製代碼
country('Australia')複製代碼
record(type:'speed', 'Production Pickup Truck with speed of 271kph')複製代碼
}複製代碼
car(name:'P50', make:'Peel', year:1962) {複製代碼
country('Isle of Man')複製代碼
record(type:'size', 'Smallest Street-Legal Car at 99cm wide and 59 kg')複製代碼
}}複製代碼

其餘語言(如Ruby)有更好的語言,儘管我想留在純Java中。彷佛有一些Java的新的XML構建器,例如practicalxml和James Murty的xmlbuilderbash

在Java中構建XML文檔的更優雅的方法是什麼?dom

概要:ide

Jon Doe建議dom4jjdomui

CurtainDog推薦使用JAXB,而jherico則告訴我這是一個有針對性的建議:而後你能夠使用Dozer來映射我當前的JavaBeans和JAXB JavaBeans。google

thaggie建議JIBX並贊成CurtainDog和jherico綁定技術其實是實用的。spa

StaxMan推薦StaxMate

在我看過的東西中,practicalxml和James Murty的xmlbuilder彷佛是最簡潔的構建器,雖然比較新穎。像JAXB這樣的綁定技術彷佛提供了額外的安全/自動化。在主流選擇中,dom4j看起來很體面,但仍然有點冗長。它提供了一個「流暢的接口」(mutators返回對變異對象的引用,以便它們能夠連接在一塊兒),我喜歡它:

public Document createDocument() {複製代碼
Document document = DocumentHelper.createDocument();複製代碼
Element root = document.addElement( "root" );複製代碼
Element author2 = root.addElement( "author" )複製代碼
.addAttribute( "name", "Toby" )複製代碼
.addAttribute( "location", "Germany" )複製代碼
.addText( "Tobias Rademacher" );複製代碼
Element author1 = root.addElement( "author" )複製代碼
.addAttribute( "name", "James" )複製代碼
.addAttribute( "location", "UK" )複製代碼
.addText( "James Strachan" );複製代碼
return document;}複製代碼

爲了簡明起見,你能夠在這個API上封裝一個精簡的外觀,爲這些方法中的一些提供簡潔的同義詞(例如,attr()而不是addAttribute())。

相關文章
相關標籤/搜索