如何简洁地构建一个XML文档?
我需要从Java对象层次结构构建一个XML文档。 Java类和XML格式都是固定的。所以我不能使用像
XStream这样的XML串行器:它将XML格式基于Java类。同样,像ISO 0710这样的Java XML绑定技术将不起作用,因为它从XML架构创建了Java类[ed:but see below]。我需要一个手动的方法。
低科技的StringBuilder路由导致了脆弱和错误的代码(至少对我而言)。 像JAXP或JDOM这样的API导致更强大的代码,但这些都是相当冗长的。 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。似乎有一些新的Java构建器,如practicalxml和James Murty的xmlbuilder。 在Java中构建XML文档的更优雅的方法是什么? 概要: Jon Doe建议dom4j和jdom。 CurtainDog推荐使用JAXB,jherico指出,这是一个主要的建议:然后可以使用Dozer来映射我当前的JavaBeans和JAXB JavaBeans之间。 thaggie推荐JIBX,并同意CurtainDog和jherico的绑定技术实际上是实际的。 StaxMan推荐StaxMate。 在我看过的东西中,actualxml和James Murty的xmlbuilder似乎是最简洁的构建器,虽然是相当新鲜的。像JAXB这样的绑定技术似乎提供了额外的安全/自动化。在主流选择中,dom4j似乎体面,虽然仍然是冗长的。它提供了一个“流畅的界面”(mutator返回对变异对象的引用,以便它们可以链接在一起),我喜欢: 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())提供简洁的同义词。 感谢所有! 史蒂芬·施密特(Stephan Schmidt)曾在Java MarkupBuilder上工作,虽然似乎没有发表。
dom4j或jdom可能是最优雅的,你可以编写代码怎么样。如果我记得,Dom4j有建设者,是的,代码更详细。
Element.addElement("x").setAttribute("x","y").xxxxx; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Swift 2.0学习笔记(Day 9)——离开表达式你试试!
- 在某些情况下,为什么Ruby的Hash#值比Hash#each_value更快?
- 设计模式---依赖倒转原则 + 里氏替换原则
- xml数据处理--ElementTree模块使用
- ajax – Chrome扩展(根据官方教程制作)不工作
- c – 关于删除指针的问题.应从哪个类中删除?
- c# – 如何将LINQ to SQL Distinct()运算符应用于List?
- ruby-on-rails – Rspec / Rails:未初始化的常量ActiveSup
- sqlplus登录\连接命令、sqlplus命令的使用大全
- 编译 wxSqlite3 总结