Java Bean与xml互相转换的方法分析
本文实例讲述了JavaBean与xml互相转换的方法。分享给大家供大家参考,具体如下:
XML和JavaBean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦。下面介绍如何进行XML和JavaBean的互相转换。
最近项目中用到了xml和javabean的转换
用到xml的时候我们需要遍历解析。。。然后将解析的值放入声明好的javabean,过程很痛苦,结果很美好
我们能不能直接从xml转化到javabean呢,或者直接成javabean转化到xml呢?
答案是OK的
使用jar包:org.nuxeo.common.xmap
写个小例子
XML
java是傻逼 java xml 10 c++程序设计 C++ c 10
Books类
importjava.util.ArrayList;
importjava.util.List;
importorg.nuxeo.common.xmap.annotation.XNodeList;
importorg.nuxeo.common.xmap.annotation.XObject;
@XObject(value="books")
publicclassBooks{
@XNodeList(value="book",type=ArrayList.class,componentType=Book.class)
privateListbook;
publicListgetBook(){
returnbook;
}
publicvoidsetBook(Listbook){
this.book=book;
}
publicvoidaddBook(Bookb){
if(book==null){
book=newArrayList();
}
book.add(b);
}
}
Book类
importjava.util.ArrayList;
importjava.util.List;
importorg.nuxeo.common.xmap.annotation.XNode;
importorg.nuxeo.common.xmap.annotation.XNodeList;
importorg.nuxeo.common.xmap.annotation.XObject;
@XObject
publicclassBook{
@XNode("title")
privateStringtitle;
@XNode("@no")
privateStringno;
@XNodeList(value="subject",type=ArrayList.class,componentType=String.class)
privateListsubjects;
@XNode("price")
privateintprice;
publicStringgetTitle(){
returntitle;
}
publicvoidsetTitle(Stringtitle){
this.title=title;
}
publicListgetSubjects(){
returnsubjects;
}
publicvoidsetSubjects(Listsubjects){
this.subjects=subjects;
}
publicintgetPrice(){
returnprice;
}
publicvoidsetPrice(intprice){
this.price=price;
}
publicStringgetNo(){
returnno;
}
publicvoidsetNo(Stringno){
this.no=no;
}
}
测试类:
importjava.util.ArrayList;
importjava.util.List;
importorg.nuxeo.common.xmap.XMap;
publicclassXmapTest{
publicstaticvoidmain(String[]args){
try{
//声明一组书的根节点
Booksbooks=newBooks();
//声明一本书
Bookbook=newBook();
//书的类型
Listsj=newArrayList();
sj.add("java");
sj.add("xml");
//设置书节点的属性
book.setPrice(10);
book.setTitle("java是傻逼");
book.setSubjects(sj);
book.setNo("1");
//将书节点添加到跟节点
books.addBook(book);
//声明一本书
Bookbook2=newBook();
//书的类型
Listsj2=newArrayList();
sj2.add("C++");
sj2.add("c");
//设置书节点的属性
book2.setPrice(10);
book2.setTitle("c++程序设计");
book2.setSubjects(sj2);
book2.setNo("2");
//将书节点添加到跟节点
books.addBook(book2);
XMapxmp=newXMap();
xmp.register(Books.class);
Listfilters=newArrayList();
System.out.println(xmp.asXmlString(books,"UTF-8",filters,true));
}catch(Exceptione){
e.printStackTrace();
}
}
}
运行上面这个类就可以生成开头所看见的那个XML的内容
解析xml
xmap.register(Books.class);
URLurl=newFile("book.xml").toURL();
InputStreamin=newFileInputStream(newFile("book.xml"));
Object[]result=(Object[])xmap.loadAll(in);
Booksbooks=(Books)result[0];
数据就完全autowirebyname进入到了bean,某些情况下很好用(xml很整齐,每个节点的内容都一样,固定)
XML和JavaBean互相转换就此实现。
PS:这里再为大家推荐几款相关在线工具供大家参考:
在线JSON转JavaBean代码工具:
http://tools.jb51.net/code/json2javabean
在线XML/JSON互相转换工具:
http://tools.jb51.net/code/xmljson
XML在线压缩/格式化工具:
http://tools.jb51.net/code/xml_format_compress
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。