`

XML、JavaBean转换

    博客分类:
  • Java
阅读更多
引用
转自http://lywybo.iteye.com/blog/468556#comments

最近项目中用到了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很整齐,每个节点的内容都一样,固定)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics