XML、JavaBean转换

[quote]转自http://lywybo.iteye.com/blog/468556#comments[/quote]
最近项目中用到了xml和java bean的转换
用到xml的时候我们需要遍历解析。。。然后将解析的值放入声明好的java bean,过程很痛苦,结果很美好
我们能不能直接从xml转化到java bean呢,或者直接成java bean转化到xml呢?
答案是OK的
使用jar包:org.heibo.xbean
写个小例子
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很整齐,每个节点的内容都一样,固定)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值