Java 將對象解析成xml 檔案

來源:互聯網
上載者:User

首先來看個例子吧~~~

這是我的一段測試代碼:

package com.domain;import java.sql.Timestamp;import java.util.ArrayList;import java.util.List;import org.dreamer.parse.xml.XMLBean;import org.dreamer.parse.xml.XMLSupport;import com.pan.action.Product;public class XMLTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubProduct product=new Product();product.setAddTime(new Timestamp(100));product.setBidPrice(12d);product.setDescription("產品的描述資訊");product.setId(1);product.setImg("圖片");product.setName("IPHONE5");product.setPrice(3000d);product.setStock(12);product.setSupplier("美國");Human human=new Human();human.setProduct(product);List list=new ArrayList();list.add(product);list.add(product);list.add(product);list.add(human);System.out.println(new XMLSupport().parseCollection(list));}}

通過對bean 進行賦值 之後,然後 運行得到結果:

<?xml version="1.0" encoding="UTF-8"?><items><Product>  <id>1</id>  <name>IPHONE5</name>  <description>產品的描述資訊</description>  <img>圖片</img>  <stock>12</stock>  <bidPrice>12.0</bidPrice>  <price>3000.0</price>  <weight>null</weight>  <unit>null</unit>  <supplier>美國</supplier>  <addTime>1970-01-01 08:00:00.1</addTime></Product><Product>  <id>1</id>  <name>IPHONE5</name>  <description>產品的描述資訊</description>  <img>圖片</img>  <stock>12</stock>  <bidPrice>12.0</bidPrice>  <price>3000.0</price>  <weight>null</weight>  <unit>null</unit>  <supplier>美國</supplier>  <addTime>1970-01-01 08:00:00.1</addTime></Product><Product>  <id>1</id>  <name>IPHONE5</name>  <description>產品的描述資訊</description>  <img>圖片</img>  <stock>12</stock>  <bidPrice>12.0</bidPrice>  <price>3000.0</price>  <weight>null</weight>  <unit>null</unit>  <supplier>美國</supplier>  <addTime>1970-01-01 08:00:00.1</addTime></Product><Human>  <id>null</id>  <type>null</type><Product>  <id>1</id>  <name>IPHONE5</name>  <description>產品的描述資訊</description>  <img>圖片</img>  <stock>12</stock>  <bidPrice>12.0</bidPrice>  <price>3000.0</price>  <weight>null</weight>  <unit>null</unit>  <supplier>美國</supplier>  <addTime>1970-01-01 08:00:00.1</addTime></Product></Human></items>

這裡可以看到,是將集合進行解析,並且還解析了對象中的對象。可以無限的解析下去。

接下來看看實作類別:

核心代碼:

XMLBean.java(該類的主要作用就是利用反射,取得對象的相關資訊)

package org.dreamer.parse.xml;import java.lang.reflect.Field;import org.dreamer.parse.dao.IDataParse;import org.dreamer.parse.util.NodeUtil;import org.dreamer.parse.util.TypeCollection;public class XMLBean  implements IDataParse{public String getString(Object object) {//類對象Class cl=object.getClass();//列名String domName=cl.getSimpleName();//欄位數組Field []fields=cl.getDeclaredFields();//資訊存放對象StringBuffer sb=new StringBuffer();sb.append("<"+domName+">\r\n");//遍曆取值for (Field field : fields) {//欄位可訪問field.setAccessible(true);try {Object value=field.get(object)==null?"null":field.get(object);if(!new TypeCollection().check(value)&&value!=null){sb.append(getString(value));continue;}sb.append(NodeUtil.merge(field.getName(), value));} catch (Exception e) {e.printStackTrace();}}sb.append("</"+domName+">\r\n");return sb.toString();}public String toString(){return getString(this);}}

在來看看支援類,

支援類,就是對XMLBean 進行了一個封裝

可以解析集合和單個對象

XMLBean.java

package org.dreamer.parse.xml;import java.util.Collection;import org.dreamer.parse.dao.IDataSupport;import org.dreamer.parse.util.NodeUtil;/** * XML解析支援類 * @author Pan * */public class XMLSupport implements IDataSupport{//解析集合時預設的名稱private String nodeName="items";/** * 如果要自訂節點名稱,需要重寫該方法 * @param nodeName */public void setNodeName(String nodeName) {this.nodeName = nodeName;}public String getNodeName() {return nodeName;}/** * 將對象解析成xml */public String parseString(Object object){XMLBean xml=new XMLBean();StringBuffer sb=new StringBuffer();//追加描述頭sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");return sb.append(xml.getString(object)).toString();}/** * 將對象集合解析成xml */public String parseCollection(Collection collection){StringBuffer sb=new StringBuffer();sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");sb.append("<"+nodeName+">\r\n");XMLBean xml=new XMLBean();for (Object object : collection) {sb.append(xml.getString(object));}sb.append("</"+nodeName+">\r\n");return sb.toString();}}

接下來是Util類,Util的作用也不小哦。

DataHelper.java (這個類其實可以有也可以沒有,主要是用來判斷一個類型的)

package org.dreamer.parse.util;import java.sql.Timestamp;public class DataHelper {/** * 檢查是否是String和Timestamp類型 * @param object * @return */public static boolean check(Object object){return object instanceof String || object instanceof Timestamp;}}

NodeUtil.java 這個類是產生節點標籤的

package org.dreamer.parse.util;/** * 節點合并工具類 * @author Pan * */public class NodeUtil {public static String merge(String node,Object value){StringBuffer sb=new StringBuffer();sb.append("  <"+node+">");sb.append(value);sb.append("</"+node+">\r\n");return sb.toString();}}

TypeCollection.java
這個類也很重要,主要是來判斷解析的欄位是不是對象,如果是對象,得調用遞迴進行解析

package org.dreamer.parse.util;import java.lang.reflect.Field;import java.sql.Timestamp;/** * 基礎類型集合 * @author Pan * */public class TypeCollection {/** * 基礎資料類型的封裝類 */private Integer integer;private Double double1;private Float float1;private Long long1;private String string;private Character character;private Boolean boolean1;private Short short1;private Timestamp timestamp;/** * 檢查該對象是不是基礎資料類型 * @param object * @return */public boolean check(Object object) {if(object==null)return false;// 擷取當前類的Class對象的欄位集合Field[] fields = this.getClass().getDeclaredFields();for (Field field : fields) {// 設定欄位可訪問field.setAccessible(true);// 擷取欄位類型來比較if (field.getType().getName().equals(object.getClass().getName())) {return true;}}return false;}}

上面就實現了一個完整的XML解析過程。

上面的這些代碼都是從Dreamer架構延伸出來的,有興趣可以看看我部落格的Dreamer專區。

有興趣的 也可以向我索要源碼。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.