XML和Java Bean的互相转换攻略

开发 后端
本文介绍XML和Java Bean互相转换是如何实现的。

XML和Java Bean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦。下面介绍如何进行XML和Java Bean的互相转换。

最近项目中用到了xml和java bean的转换

用到xml的时候我们需要遍历解析。。。然后将解析的值放入声明好的java bean,过程很痛苦,结果很美好

我们能不能直接从xml转化到java bean呢,或者直接成java bean转化到xml呢?

答案是OK的

使用jar包:org.nuxeo.common.xmap

写个小例子

XML

  1. < ?xml version="1.0" encoding="UTF-8"?>    
  2. < books>    
  3. < book no="1">    
  4. < title>java是傻逼< /title>    
  5. < subject>java< /subject>    
  6. < subject>xml< /subject>    
  7. < price>10< /price>    
  8. < /book>    
  9. < book no="2">    
  10. < title>c++程序设计< /title>    
  11. < subject>C++< /subject>    
  12. < subject>c< /subject>    
  13. < price>10< /price>    
  14. < /book>    
  15. < /books>   

Books类

  1. import java.util.ArrayList;    
  2. import java.util.List;    
  3.     
  4. import org.nuxeo.common.xmap.annotation.XNodeList;    
  5. import org.nuxeo.common.xmap.annotation.XObject;    
  6.     
  7. @XObject(value = "books")    
  8. public class Books {        
  9.     @XNodeList(value = "book", type = ArrayList.class, componentType = Book.class)    
  10.     private List< Book> book;    
  11.         
  12.     public List< Book> getBook() {    
  13.         return book;    
  14.     }    
  15.     
  16.     public void setBook(List< Book> book) {    
  17.         this.book = book;    
  18.     }    
  19.         
  20.     public void addBook(Book b){    
  21.         if(book==null){    
  22.             book=new ArrayList< Book>();    
  23.         }    
  24.         book.add(b);    
  25.     }    
  26. }    
  27.  

Book类

  1. import java.util.ArrayList;    
  2. import java.util.List;    
  3.     
  4. import org.nuxeo.common.xmap.annotation.XNode;    
  5. import org.nuxeo.common.xmap.annotation.XNodeList;    
  6. import org.nuxeo.common.xmap.annotation.XObject;    
  7.     
  8.     
  9. @XObject    
  10. public class Book {    
  11.     @XNode("title")    
  12.     private String   title;    
  13.     
  14.     @XNode("@no")    
  15.     private String no;    
  16.         
  17.     @XNodeList(value = "subject", type = ArrayList.class, componentType = String.class)    
  18.     private List< String> subjects;    
  19.         
  20.     @XNode("price")    
  21.     private int   price;    
  22.     
  23.     public String getTitle() {    
  24.         return title;    
  25.     }    
  26.     
  27.     public void setTitle(String title) {    
  28.         this.title = title;    
  29.     }    
  30.     
  31.     public List< String> getSubjects() {    
  32.         return subjects;    
  33.     }    
  34.     
  35.     public void setSubjects(List< String> subjects) {    
  36.         this.subjects = subjects;    
  37.     }    
  38.     
  39.     public int getPrice() {    
  40.         return price;    
  41.     }    
  42.     
  43.     public void setPrice(int price) {    
  44.         this.price = price;    
  45.     }    
  46.     
  47.     public String getNo() {    
  48.         return no;    
  49.     }    
  50.     
  51.     public void setNo(String no) {    
  52.         this.no = no;    
  53.     }    
  54. }    
  55.  

测试类:

  1. import java.util.ArrayList;    
  2. import java.util.List;    
  3.     
  4. import org.nuxeo.common.xmap.XMap;    
  5.     
  6.     
  7. public class XmapTest {    
  8.     public static void main(String[] args) {    
  9.         try {    
  10.             //声明一组书的根节点    
  11.             Books books=new Books();    
  12.                 
  13.             //声明一本书    
  14.             Book book=new Book();    
  15.             //书的类型    
  16.             List< String> sj=new ArrayList< String>();    
  17.             sj.add("java");    
  18.             sj.add("xml");    
  19.             //设置书节点的属性    
  20.             book.setPrice(10);    
  21.             book.setTitle("java是傻逼");    
  22.             book.setSubjects(sj);    
  23.             book.setNo("1");    
  24.                 
  25.             //将书节点添加到跟节点    
  26.             books.addBook(book);    
  27.                 
  28.           //声明一本书    
  29.             Book book2=new Book();    
  30.             //书的类型    
  31.             List< String> sj2=new ArrayList< String>();    
  32.             sj2.add("C++");    
  33.             sj2.add("c");    
  34.             //设置书节点的属性    
  35.             book2.setPrice(10);    
  36.             book2.setTitle("c++程序设计");    
  37.             book2.setSubjects(sj2);    
  38.             book2.setNo("2");    
  39.                 
  40.             //将书节点添加到跟节点    
  41.             books.addBook(book2);    
  42.                 
  43.             XMap xmp = new XMap();    
  44.             xmp.register(Books.class);    
  45.     
  46.             List< String> filters = new ArrayList< String>();    
  47.     
  48.             System.out.println(xmp.asXmlString(books, "UTF-8", filters, true));    
  49.         } catch (Exception e) {    
  50.             e.printStackTrace();    
  51.         }    
  52.     }    
  53. }    
  54.  

运行上面这个类就可以生成开头所看见的那个XML的内容

解析xml

  1. xmap.register(Books.class);    
  2.             URL url = new File("book.xml").toURL();    
  3.             InputStream in = new FileInputStream(new File("book.xml"));    
  4.             Object[] result = (Object[]) xmap.loadAll(in);    
  5.     
  6. Books books=(Books)result[0];    
  7.  

数据就完全autowire by name进入到了bean,某些情况下很好用(xml很整齐,每个节点的内容都一样,固定)

XML和Java Bean互相转换就此实现。

【编辑推荐】

  1. JSP和BEAN详细剖析
  2. Servlet和JSP经验总结
  3. 带参数方法调用JSP EL表达式
  4. 详解JSP开发环境的配置
  5. 全面介绍JSP标准标记库JSTL
责任编辑:yangsai 来源: JavaEye博客
相关推荐

2020-10-22 08:01:52

XMLJSON转换

2009-06-23 14:22:00

DOM文档XML文件Java

2012-06-29 13:45:53

XML

2009-08-13 09:33:07

JavaBean到XM

2021-06-18 07:35:46

Java接口应用

2013-06-08 11:13:00

Android开发XML解析

2019-12-16 10:13:16

Python字符串数据

2009-06-15 15:10:02

Java数据转换JSON

2009-06-18 11:15:53

装配beanxml配置Spring

2011-11-29 13:53:34

ADO.NET

2009-09-08 16:55:01

Linq实现XML转换

2009-04-21 13:14:33

SilverlightWPF扩展

2021-06-10 06:57:39

Spring.xmlBean对象

2009-07-03 14:40:33

2015-11-24 09:53:22

AngularJSXMLJSON

2010-01-07 15:41:58

XML转换为JSON

2011-06-15 12:36:58

JSPBEAN

2009-09-02 10:26:23

JSP和BEAN

2009-07-01 14:09:24

Servlet和BeaJSP

2022-07-20 07:45:52

POJOJavaSpring IoC
点赞
收藏

51CTO技术栈公众号