xml和java Bean的直接转换,Xmap

最近项目中用到了xml和java bean的转换
用到xml的时候我们需要遍历解析。。。然后将解析的值放入声明好的java bean,过程很痛苦,结果很美好
我们能不能直接从xml转化到java bean呢,或者直接成java bean转化到xml呢?
答案是OK的
使用jar包:org.heibo.xbean

写个小例子
XML
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>  
<?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类
Java代码 复制代码
  1. import java.util.ArrayList;   
  2. import java.util.List;   
  3.   
  4. import org.nuxeo.common.xmap.annotation.XNodeList;   
  5. import org.nuxeo.common.xmap.annotation.XObject;   
  6.   
  7. @XObject(value = "books")   
  8. public class Books {       
  9.     @XNodeList(value = "book", type = ArrayList.class, componentType = Book.class)   
  10.     private List<Book> book;   
  11.        
  12.     public List<Book> getBook() {   
  13.         return book;   
  14.     }   
  15.   
  16.     public void setBook(List<Book> book) {   
  17.         this.book = book;   
  18.     }   
  19.        
  20.     public void addBook(Book b){   
  21.         if(book==null){   
  22.             book=new ArrayList<Book>();   
  23.         }   
  24.         book.add(b);   
  25.     }   
  26. }  
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类
Java代码 复制代码
  1. import java.util.ArrayList;   
  2. import java.util.List;   
  3.   
  4. import org.nuxeo.common.xmap.annotation.XNode;   
  5. import org.nuxeo.common.xmap.annotation.XNodeList;   
  6. import org.nuxeo.common.xmap.annotation.XObject;   
  7.   
  8.   
  9. @XObject  
  10. public class Book {   
  11.     @XNode("title")   
  12.     private String   title;   
  13.   
  14.     @XNode("@no")   
  15.     private String no;   
  16.        
  17.     @XNodeList(value = "subject", type = ArrayList.class, componentType = String.class)   
  18.     private List<String> subjects;   
  19.        
  20.     @XNode("price")   
  21.     private int   price;   
  22.   
  23.     public String getTitle() {   
  24.         return title;   
  25.     }   
  26.   
  27.     public void setTitle(String title) {   
  28.         this.title = title;   
  29.     }   
  30.   
  31.     public List<String> getSubjects() {   
  32.         return subjects;   
  33.     }   
  34.   
  35.     public void setSubjects(List<String> subjects) {   
  36.         this.subjects = subjects;   
  37.     }   
  38.   
  39.     public int getPrice() {   
  40.         return price;   
  41.     }   
  42.   
  43.     public void setPrice(int price) {   
  44.         this.price = price;   
  45.     }   
  46.   
  47.     public String getNo() {   
  48.         return no;   
  49.     }   
  50.   
  51.     public void setNo(String no) {   
  52.         this.no = no;   
  53.     }   
  54. }  
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;
    }
}


测试类:
Java代码 复制代码
  1. import java.util.ArrayList;   
  2. import java.util.List;   
  3.   
  4. import org.nuxeo.common.xmap.XMap;   
  5.   
  6.   
  7. public class XmapTest {   
  8.     public static void main(String[] args) {   
  9.         try {   
  10.             //声明一组书的根节点   
  11.             Books books=new Books();   
  12.                
  13.             //声明一本书   
  14.             Book book=new Book();   
  15.             //书的类型   
  16.             List<String> sj=new ArrayList<String>();   
  17.             sj.add("java");   
  18.             sj.add("xml");   
  19.             //设置书节点的属性   
  20.             book.setPrice(10);   
  21.             book.setTitle("java是傻逼");   
  22.             book.setSubjects(sj);   
  23.             book.setNo("1");   
  24.                
  25.             //将书节点添加到跟节点   
  26.             books.addBook(book);   
  27.                
  28.           //声明一本书   
  29.             Book book2=new Book();   
  30.             //书的类型   
  31.             List<String> sj2=new ArrayList<String>();   
  32.             sj2.add("C++");   
  33.             sj2.add("c");   
  34.             //设置书节点的属性   
  35.             book2.setPrice(10);   
  36.             book2.setTitle("c++程序设计");   
  37.             book2.setSubjects(sj2);   
  38.             book2.setNo("2");   
  39.                
  40.             //将书节点添加到跟节点   
  41.             books.addBook(book2);   
  42.                
  43.             XMap xmp = new XMap();   
  44.             xmp.register(Books.class);   
  45.   
  46.             List<String> filters = new ArrayList<String>();   
  47.   
  48.             System.out.println(xmp.asXmlString(books, "UTF-8", filters, true));   
  49.         } catch (Exception e) {   
  50.             e.printStackTrace();   
  51.         }   
  52.     }   
  53. }  
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
Java代码 复制代码
  1. xmap.register(Books.class);   
  2.             URL url = new File("book.xml").toURL();   
  3.             InputStream in = new FileInputStream(new File("book.xml"));   
  4.             Object[] result = (Object[]) xmap.loadAll(in);   
  5.   
  6. Books books=(Books)result[0];  
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很整齐,每个节点的内容都一样,固定)

你可能感兴趣的:(java,C++,c,bean,xml)