利用JAXB实现XML文件和Java对象之间的转化

JAXB(Java Architecture for XML Binding )是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

根据XML Schema生成相对应的Java类:

XML Schema与特定XML的关系类似于Java 类和 实例之间的关系。以下根据特定的Schema生成相对应的Java类,然后实例化这些Java对象,再反向生成XMl文件

利用Jaxb的xjc命令直接就可以生成java类:

示例:

xjc bookstore.xsd -d src -p jaxb

bookstore.xsdSchema的文件名,一般以xsd作为文件名的后缀。

-d 的选项,是指定系统生成的Java源代码所放置的目录,示例中为:src

-p 的选项,是指定系统生成的Java源代码所在的Java Package的名称,示例中为:jaxb

这样就会在jaxb包下的src下生成给定的bookstore.xsd Schema文件对应的java类。在本例中分别生成了AuthorName.java Bookstore.java BookType.java objectFactory.java

接下来就是实例化了,代码示例如下:

public class JavaObject2Xml {
public void javaToXml(){
try{
JAXBContext jc = JAXBContext.newInstance("jaxb"); //参数为JAXB生成的java文件所在包名

ObjectFactory objFactory = new ObjectFactory(); //生成对象工厂
//通过工厂创建复杂类型及子元素
BookstoreType bookstoreType=objFactory.createBookstoreType();
bookstoreType.book=new ArrayList();

BookType bookType_1=objFactory.createBookType();
BookType bookType_2=objFactory.createBookType();
AuthorName author_1=objFactory.createAuthorName();
//创建子元素实例
author_1.setFirstName("Martin");
author_1.setLastName("Ma");
AuthorName author_2=objFactory.createAuthorName();
author_2.setFirstName("Laura");
author_2.setLastName("Li");
bookType_1.setAuthor(author_1);
bookType_1.setGenre("ScienceFiction");
bookType_1.setPrice(new BigDecimal(40.0));
bookType_1.setTitle("The Secret of universe");
bookType_2.setAuthor(author_2);
bookType_2.setGenre("ComputerScience");
bookType_2.setPrice(new BigDecimal(70.0));
bookType_2.setTitle("Datastructure and Algorithms");
bookstoreType.book.add(bookType_1);
bookstoreType.book.add(bookType_2);
//于Marshaller和Unmarshaller,这两个对象主要是用于Java对象和XML文档互相转换的主要接口
JAXBElement bookstoreE=objFactory.createBookstore(bookstoreType);
javax.xml.bind.Marshaller marshaller = jc.createMarshaller();
//生成符合给定schema的xml文件
marshaller.marshal(bookstoreE,new FileOutputStream("F:/Java workspace/jaxb/bookstore.xml"));

}
catch(Exception e){
e.printStackTrace();
}
}

这样就会在给定路径下生成一个符合给定Schema的Xml文件。

参考资料:http://www.jb51.cc/article/p-zjjxphrp-cx.html

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念