您的位置:首页 > 编程语言 > Java开发

使用XMAP完成JavaBean和XML之间转换

2014-10-12 19:36 316 查看

使用XMAP完成JavaBean和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;

  @XObject

  public 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互相转换就此实现。

两个需要注意的地方:1.Xmap包最新下载地址https://maven.nuxeo.org/用最新版本的就行。运行程序时需要把log4j的日志路径配好,否则会报错。s2Xmap需要依赖一个apache的xercesImpl.jar包下载地址http://download.csdn.net/detail/alice_0812/305407
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: