本文實例講述了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程序設計有所幫助。
新聞熱點
疑難解答
圖片精選