深圳java培训:构建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())。