首页 > 开发 > Java > 正文

Java Bean与xml互相转换的方法分析

2024-07-14 08:43:15
字体:
来源:转载
供稿:网友

本文实例讲述了Java Bean与xml互相转换的方法。分享给大家供大家参考,具体如下:

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

<?xml version="1.0" encoding="UTF-8"?><books><book no="1"><title>java是傻逼</title><subject>java</subject><subject>xml</subject><price>10</price></book><book no="2"><title>c++程序设计</title><subject>C++</subject><subject>c</subject><price>10</price></book></books>

Books类

import java.util.ArrayList;import java.util.List;import org.nuxeo.common.xmap.annotation.XNodeList;import org.nuxeo.common.xmap.annotation.XObject;@XObject(value = "books")public class Books {  @XNodeList(value = "book", type = ArrayList.class, componentType = Book.class)  private List< Book> book;  public List< Book> getBook() {    return book;  }  public void setBook(List< Book> book) {    this.book = book;  }  public void addBook(Book b){    if(book==null){      book=new ArrayList< Book>();    }    book.add(b);  }}

Book类

import java.util.ArrayList;import java.util.List;import org.nuxeo.common.xmap.annotation.XNode;import org.nuxeo.common.xmap.annotation.XNodeList;import org.nuxeo.common.xmap.annotation.XObject;@XObjectpublic class Book {  @XNode("title")  private String  title;  @XNode("@no")  private String no;  @XNodeList(value = "subject", type = ArrayList.class, componentType = String.class)  private List< String> subjects;  @XNode("price")  private int  price;  public String getTitle() {    return title;  }  public void setTitle(String title) {    this.title = title;  }  public List< String> getSubjects() {    return subjects;  }  public void setSubjects(List< String> subjects) {    this.subjects = subjects;  }  public int getPrice() {    return price;  }  public void setPrice(int price) {    this.price = price;  }  public String getNo() {    return no;  }  public void setNo(String no) {    this.no = no;  }}

测试类:

import java.util.ArrayList;import java.util.List;import org.nuxeo.common.xmap.XMap;public class XmapTest {  public static void main(String[] args) {    try {      //声明一组书的根节点      Books books=new Books();      //声明一本书      Book book=new Book();      //书的类型      List< String> sj=new ArrayList< String>();      sj.add("java");      sj.add("xml");      //设置书节点的属性      book.setPrice(10);      book.setTitle("java是傻逼");      book.setSubjects(sj);      book.setNo("1");      //将书节点添加到跟节点      books.addBook(book);     //声明一本书      Book book2=new Book();      //书的类型      List< String> sj2=new ArrayList< String>();      sj2.add("C++");      sj2.add("c");      //设置书节点的属性      book2.setPrice(10);      book2.setTitle("c++程序设计");      book2.setSubjects(sj2);      book2.setNo("2");      //将书节点添加到跟节点      books.addBook(book2);      XMap xmp = new XMap();      xmp.register(Books.class);      List< String> filters = new ArrayList< String>();      System.out.println(xmp.asXmlString(books, "UTF-8", filters, true));    } catch (Exception e) {      e.printStackTrace();    }  }}

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

解析xml

xmap.register(Books.class);      URL url = new File("book.xml").toURL();      InputStream in = new FileInputStream(new File("book.xml"));      Object[] result = (Object[]) xmap.loadAll(in);Books books=(Books)result[0];

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

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

希望本文所述对大家java程序设计有所帮助。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表