XML和Java Bean的互相轉(zhuǎn)換攻略
XML和Java Bean互相轉(zhuǎn)換是一個(gè)很有用的功能,因?yàn)閮烧哂兄昂蠛献鞯年P(guān)系,但解析的過程比較痛苦。下面介紹如何進(jìn)行XML和Java Bean的互相轉(zhuǎn)換。
最近項(xiàng)目中用到了xml和java bean的轉(zhuǎn)換
用到xml的時(shí)候我們需要遍歷解析。。。然后將解析的值放入聲明好的java bean,過程很痛苦,結(jié)果很美好
我們能不能直接從xml轉(zhuǎn)化到j(luò)ava bean呢,或者直接成java bean轉(zhuǎn)化到xml呢?
答案是OK的
使用jar包:org.nuxeo.common.xmap
寫個(gè)小例子
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++程序設(shè)計(jì)< /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 {
- //聲明一組書的根節(jié)點(diǎn)
- Books books=new Books();
- //聲明一本書
- Book book=new Book();
- //書的類型
- List< String> sj=new ArrayList< String>();
- sj.add("java");
- sj.add("xml");
- //設(shè)置書節(jié)點(diǎn)的屬性
- book.setPrice(10);
- book.setTitle("java是傻逼");
- book.setSubjects(sj);
- book.setNo("1");
- //將書節(jié)點(diǎn)添加到跟節(jié)點(diǎn)
- books.addBook(book);
- //聲明一本書
- Book book2=new Book();
- //書的類型
- List< String> sj2=new ArrayList< String>();
- sj2.add("C++");
- sj2.add("c");
- //設(shè)置書節(jié)點(diǎn)的屬性
- book2.setPrice(10);
- book2.setTitle("c++程序設(shè)計(jì)");
- book2.setSubjects(sj2);
- book2.setNo("2");
- //將書節(jié)點(diǎn)添加到跟節(jié)點(diǎn)
- 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();
- }
- }
- }
運(yùn)行上面這個(gè)類就可以生成開頭所看見的那個(gè)XML的內(nèi)容
解析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];
數(shù)據(jù)就完全autowire by name進(jìn)入到了bean,某些情況下很好用(xml很整齊,每個(gè)節(jié)點(diǎn)的內(nèi)容都一樣,固定)
XML和Java Bean互相轉(zhuǎn)換就此實(shí)現(xiàn)。
【編輯推薦】