构建xml文档
我需要从Java对象层次结构构建一个XML文档。Java类和XML格式都是固定的。所以我不能使用像XStream这样的XML序列化器:它将XML格式基于Java类。同样,像JAXB这样的Java XML绑定技术也不行,因为它从XML模式创建Java类[ed:但见下文]。我需要一个手动方法。
低技术的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的新的XML构建器,例如practicalxml和James Murty的xmlbuilder。
在Java中构建XML文档的更优雅的方法是什么?
概要:
Jon Doe建议dom4j和jdom。
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上封装一个精简的外观,为这些方法中的一些提供简洁的同义词(例如,attr()而不是addAttribute())。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
nsq (三) 消息传输的可靠性和持久化[一]
上两篇帖子主要说了一下nsq的拓扑结构,如何进行故障处理和横向扩展,保证了客户端和服务端的长连接,连接保持了,就要传输数据了,nsq如何保证消息被订阅者消费,如何保证消息不丢失,就是今天要阐述的内容。 nsq topic、channel、和消费我客户端的结构如上图,一个topic下有多个channel每个channel可以被多个客户端订阅。消息处理的大概流程:当一个消息被nsq接收后,传给相应的topic,topic把消息传递给所有的channel ,channel根据算法选择一个订阅客户端,把消息发送给客户端进行处理。看上去这个流程是没有问题的,我们来思考几个问题 网络传输的不确定性,比如超时;客户端处理消息时崩溃等,消息如何重传; 如何标识消息被客户端成功处理完毕; 消息的持久化,nsq服务端重新启动时消息不丢失; 服务端对发送中的消息处理逻辑 之前的帖子说过客户端和服务端进行连接后,会启动一个gorouting来发送信息给客户端 go p.messagePump(client, messagePumpStartedChan) 然后会监听客户端发过来的命令client.Reader...
- 下一篇
阿里云服务器最低86元/年 - 最高送¥5000代金券+瓜分百万现金大奖!
阿里云双11优惠活动已开启,要说什么时候上云最合适,非双11节日莫属了,一年一度的双11节日似乎象征着史上最优惠活动已开启。新用户购买云服务器、数据库等爆品云产品低至1折抢购。最低云服务器ECS/1年仅需86元。还等什么呢?赶紧来抢购吧!错过就要等一年了!(进入双11主会场) 注明:在双11活动上云不仅能享受1折起折扣专享,还可以在备战双11活动详情页,激活优惠码立享满减,最高可减4000元,激活优惠码后,下单购买时别忘了通过购物车批量采购,这样才能得到更高满减面值优惠。 实例规格 CPU 内存 宽带 硬盘 购买时长 活动价 官网抢购 云服务器ECS计算型c5 2核 4G 1M 50G 1年 ¥693.30/年 立即抢购 云服务器ECS计算型c5 2核 4G 5M 50G 1年 ¥971.50/年 立即抢购 云服务器ECS通用型g5 2核 8G 6M 50G 1年 ¥799.00/3年 立即抢购 云服务器ECS通用型g5 4核 16G 8M 50G 1年 ¥3471.94/年 立即抢购 云服务器ECS突发性能型t5 1核 1G 1M~10M 40G 1年 ¥313.20/年 立即抢购 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6