当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
XML和JavaBean的互相转换攻略
发布时间:2010/5/20 15:04:35 来源:城市学习网 编辑:ziteng
  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类
  16.import java.util.ArrayList;
  17.import java.util.List;
  18.
  19.import org.nuxeo.common.xmap.annotation.XNodeList;
  20.import org.nuxeo.common.xmap.annotation.XObject;
  21.
  22.@XObject(value = "books")
  23.public class Books {
  24.    @XNodeList(value = "book", type = ArrayList.class, componentType = Book.class)
  25.    private List< Book> book;
  26.
  27.    public List< Book> getBook() {
  28.        return book;
  29.    }
  30.
  31.    public void setBook(List< Book> book) {
  32.        this.book = book;
  33.    }
  34.
  35.    public void addBook(Book b){
  36.        if(book==null){
  37.            book=new ArrayList< Book>();
  38.        }
  39.        book.add(b);
  40.    }
  41.}
  42.
  Book类
  43.import java.util.ArrayList;
  44.import java.util.List;
  45.
  46.import org.nuxeo.common.xmap.annotation.XNode;
  47.import org.nuxeo.common.xmap.annotation.XNodeList;
  48.import org.nuxeo.common.xmap.annotation.XObject;
  49.
  50.
  51.@XObject
  52.public class Book {
  53.    @XNode("title")
  54.    private String   title;
  55.
  56.    @XNode("@no")
  57.    private String no;
  58.
  59.    @XNodeList(value = "subject", type = ArrayList.class, componentType = String.class)
  60.    private List< String> subjects;
  61.
  62.    @XNode("price")
  63.    private int   price;
  64.
  65.    public String getTitle() {
  66.        return title;
  67.    }
  68. [NextPage]   69.    public void setTitle(String title) {
  70.        this.title = title;
  71.    }
  72.
  73.    public List< String> getSubjects() {
  74.        return subjects;
  75.    }
  76.
  77.    public void setSubjects(List< String> subjects) {
  78.        this.subjects = subjects;
  79.    }
  80.
  81.    public int getPrice() {
  82.        return price;
  83.    }
  84.
  85.    public void setPrice(int price) {
  86.        this.price = price;
  87.    }
  88.
  89.    public String getNo() {
  90.        return no;
  91.    }
  92.
  93.    public void setNo(String no) {
  94.        this.no = no;
  95.    }
  96.}
  97.
  测试类:
  98.import java.util.ArrayList;
  99.import java.util.List;
  100.
  101.import org.nuxeo.common.xmap.XMap;
  102.
  103.
  104.public class XmapTest {
  105.    public static void main(String[] args) {
  106.        try {
  107.            //声明一组书的根节点
  108.            Books books=new Books();
  109.
  110.            //声明一本书
  111.            Book book=new Book();
  112.            //书的类型
  113.            List< String> sj=new ArrayList< String>();
  114.            sj.add("java");
  115.            sj.add("xml");
  116.            //设置书节点的属性
  117.            book.setPrice(10);
  118.            book.setTitle("java是傻逼");
  119.            book.setSubjects(sj);
  120.            book.setNo("1");
  121.
  122.            //将书节点添加到跟节点
  123.            books.addBook(book);
  124.
  125.          //声明一本书
  126.            Book book2=new Book();
  127.            //书的类型
  128.            List< String> sj2=new ArrayList< String>();
  129.            sj2.add("C++");
  130.            sj2.add("c");
  131.            //设置书节点的属性
  132.            book2.setPrice(10);
  133.            book2.setTitle("c++程序设计");
  134.            book2.setSubjects(sj2);
  135.            book2.setNo("2");
  136.
  137.            //将书节点添加到跟节点
  138.            books.addBook(book2);
  139.
  140.            XMap xmp = new XMap();
  141.            xmp.register(Books.class);
  142.
  143.            List< String> filters = new ArrayList< String>();
  144.
  145.            System.out.println(xmp.asXmlString(books, "UTF-8", filters, true));
  146.        } catch (Exception e) {
  147.            e.printStackTrace();
  148.        }
  149.    }
  150.}
  151.
  运行上面这个类就可以生成开头所看见的那个XML的内容
  解析xml
  152.xmap.register(Books.class);
  153.            URL url = new File("book.xml").toURL();
  154.            InputStream in = new FileInputStream(new File("book.xml"));
  155.            Object[] result = (Object[]) xmap.loadAll(in);
  156.
  157.Books books=(Books)result[0];
  158.
  数据就完全autowire by name进入到了bean,某些情况下很好用(xml很整齐,每个节点的内容都一样,固定)
  XML和Java Bean互相转换就此实现。
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved