首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中简洁地构建XML文档?

如何在Java中简洁地构建XML文档?
EN

Stack Overflow用户
提问于 2009-06-20 03:02:20
回答 6查看 13.9K关注 0票数 21

我需要从Java对象层次结构构建一个XML文档。Java类和XML格式都是固定的。所以我不能使用像XStream这样的XML序列化程序:它将XML格式建立在Java类的基础上。同样,像JAXB这样的Java XML绑定技术也不起作用,因为它是从XML schema ed创建Java类的,但请看下面的内容。我需要一个手动的方法。

低技术的StringBuilder路由导致了脆弱和错误的代码(至少对我来说是这样)。

JAXPJDOM这样的应用编程接口会产生更健壮的代码,但这些代码非常冗长。

Groovy有一个优雅的MarkupBuilder

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的XML构建器,例如practicalxml和James Murty的xmlbuilder

在Java中构建XML文档有哪些更优雅的方法?

摘要:

无名氏建议使用dom4jjdom

CurtainDog推荐使用JAXB,jherico告诉我这是一个中肯的建议:您可以使用Dozer在我当前的JavaBeans和JAXB JavaBeans之间进行映射。

thaggie推荐了JIBX,并同意CurtainDog和jherico的观点,即绑定技术实际上是实用的。

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上包装一个薄薄的facade,为其中一些方法提供简洁的同义词(例如,addAttribute()而不是attr() )。

谢谢大家!

附言:斯蒂芬·施密特在一个Java MarkupBuilder上工作,尽管它似乎还没有发布。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1020828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档