一、XML文件格式
二、List中的Object格式
二、将List对象转换成XML格式的document
三、将XML格式的document转化成List对象
本文可以主要介绍将java中Object类组成的List与自定义格式的XML进行相互转换来实现数据存储与读取。我今天给大家介绍的存储方法只能将同一个Object类的数据存储到同一XML中,但是可以批量存储。
一、XML文件格式
下面是我们自定义的XML格式,changshusocket为根节点,根节点下有三个项,第一项mode是模式,第二项objName是该XML存储的数据对应的Object,第三项tableName是数据库存储的表名。 里面是Object对象的各个变量及其对应值。
- <?xml version="1.0" encoding="utf-8"?>
- <changshusocket mode="1" objName="com.jwt.entity.in.PdaDictsCodesEntity" tableName="PDA_DICTS_CODES">
- <com.jwt.entity.in.PdaDictsCodesEntity>
- <n_dmlb>28</n_dmlb>
- <v_flh>320581005600</v_flh>
- <v_mc>大义中队</v_mc>
- <v_sfky>1</v_sfky>
- <n_pxyj></n_pxyj>
- <v_xgr></v_xgr>
- <d_xgsj></d_xgsj>
- <v_bz></v_bz>
- <is_delete>0</is_delete>
- <n_ver>3</n_ver>
- </com.jwt.entity.in.PdaDictsCodesEntity>
- <com.jwt.entity.in.PdaDictsCodesEntity>
- <n_dmlb>37</n_dmlb>
- <v_flh>6</v_flh>
- <v_mc>五进宣传</v_mc>
- <v_sfky>1</v_sfky>
- <n_pxyj>4</n_pxyj>
- <v_xgr></v_xgr>
- <d_xgsj></d_xgsj>
- <v_bz></v_bz>
- <is_delete>0</is_delete>
- <n_ver>3</n_ver>
- </com.jwt.entity.in.PdaDictsCodesEntity>
- </changshusocket>
二、List中的Object格式
下面是以上XML所对应的实体类:
- package com.jwt.entity.in;
- import java.math.BigDecimal;
- import java.util.Date;
- import com.traffic.common.annotation.TableAnnotation;
- import com.traffic.common.base.entity.BaseEntity;
- @TableAnnotation(table="PDA_DICTS_CODES")
- public class PdaDictsCodesEntity extends BaseEntity
- {
- private static final long serialVersionUID = 1L;
- @TableAnnotation(isCode=true)
- private BigDecimal n_dmlb;
- @TableAnnotation(isCode=true)
- private String v_flh;
- @TableAnnotation
- private String v_mc;
- @TableAnnotation
- private String v_sfky;
- @TableAnnotation
- private BigDecimal n_pxyj;
- @TableAnnotation
- private String v_xgr;
- @TableAnnotation
- private Date d_xgsj;
- @TableAnnotation
- private String v_bz;
- @TableAnnotation
- private String is_delete;
- @TableAnnotation
- private BigDecimal n_ver;
- public BigDecimal getN_ver() {
- return n_ver;
- }
- public void setN_ver(BigDecimal n_ver) {
- this.n_ver = n_ver;
- }
- public String getIs_delete() {
- return is_delete;
- }
- public void setIs_delete(String is_delete) {
- this.is_delete = is_delete;
- }
- /**
- * @return the n_dmlb
- */
- public BigDecimal getN_dmlb()
- {
- return n_dmlb;
- }
- /**
- * @param nDmlb the n_dmlb to set
- */
- public void setN_dmlb(BigDecimal nDmlb)
- {
- n_dmlb = nDmlb;
- }
- /**
- * @return the v_flh
- */
- public String getV_flh()
- {
- return v_flh;
- }
- /**
- * @param vFlh the v_flh to set
- */
- public void setV_flh(String vFlh)
- {
- v_flh = vFlh;
- }
- /**
- * @return the v_mc
- */
- public String getV_mc()
- {
- return v_mc;
- }
- /**
- * @param vMc the v_mc to set
- */
- public void setV_mc(String vMc)
- {
- v_mc = vMc;
- }
- /**
- * @return the v_sfky
- */
- public String getV_sfky()
- {
- return v_sfky;
- }
- /**
- * @param vSfky the v_sfky to set
- */
- public void setV_sfky(String vSfky)
- {
- v_sfky = vSfky;
- }
- /**
- * @return the n_pxyj
- */
- public BigDecimal getN_pxyj()
- {
- return n_pxyj;
- }
- /**
- * @param nPxyj the n_pxyj to set
- */
- public void setN_pxyj(BigDecimal nPxyj)
- {
- n_pxyj = nPxyj;
- }
- /**
- * @return the v_xgr
- */
- public String getV_xgr()
- {
- return v_xgr;
- }
- /**
- * @param vXgr the v_xgr to set
- */
- public void setV_xgr(String vXgr)
- {
- v_xgr = vXgr;
- }
- /**
- * @return the d_xgsj
- */
- public Date getD_xgsj()
- {
- return d_xgsj;
- }
- /**
- * @param dXgsj the d_xgsj to set
- */
- public void setD_xgsj(Date dXgsj)
- {
- d_xgsj = dXgsj;
- }
- /**
- * @return the v_bz
- */
- public String getV_bz()
- {
- return v_bz;
- }
- /**
- * @param vBz the v_bz to set
- */
- public void setV_bz(String vBz)
- {
- v_bz = vBz;
- }
- }
三、将List对象转换成XML格式的document
- private static void genDomFromList(Document document,
- SendMessage sendMessage) {
- // TODO Auto-generated method stub
- ArrayList list = sendMessage.getList();
- int mode = sendMessage.getMode();
- String processName = sendMessage.getProcessName();
- try {
- if ((list != null) && (list.size() > 0)) {
- String elementName = list.get(0).getClass().getName();
- //访问类中所有的字段
- Field[] fields = list.get(0).getClass().getDeclaredFields();
- //从配置文件文件中获取根节点名称
- Element _root = document.addElement(Props.getInstance()
- .getProp("XmlRoot"));
- //根节点的第一项为模式
- _root.addAttribute("mode", String.valueOf(mode));
- // 根节点第二项为类名
- _root.addAttribute("objName", elementName);
- //根节点第三项为数据库表名
- _root.addAttribute("tableName", processName);
- //遍历list中所有的类
- for (Iterator localIterator = list.iterator(); localIterator
- .hasNext();) {
- Object item = localIterator.next();
- Element elementTemp = _root.addElement(elementName);
- //遍历类中的每一项,来确定将类中的值转化为我们所需要的添加入document
- for (int i = 0; i < fields.length; i++)
- if (!fields[i].getName().equals("serialVersionUID")) {
- Element elementTemp1 = elementTemp
- .addElement(fields[i].getName());
- boolean accessFlag = fields[i].isAccessible();
- fields[i].setAccessible(true);
- Object objText = null;
- try {
- objText = fields[i].get(item);
- } catch (Exception e) {
- log.error("class反射读取失败:", e);
- }
- if (objText == null)
- elementTemp1.setText("");
- else if ((objText instanceof Date)) {
- elementTemp1.setText(DateTool.parseString(
- (Date) objText, null));
- } else if (fields[i].getType().getName()
- .equals("[B"))
- elementTemp1.setText(encoder
- .encode((byte[]) objText));
- else
- elementTemp1.setText(objText.toString());
- fields[i].setAccessible(accessFlag);
- }
- }
- }
- } catch (Exception e) {
- log.error("list转为dom失败:", e);
- }
- }
四、将XML格式的document转化成List对象
- private static String[] genListFromDom(ArrayList list, Document document) {
- // TODO Auto-generated method stub
- try {
- Element root = document.getRootElement();
- //根节点的第一项为模式
- String mode = root.attributeValue("mode");
- //根节点的第二项为数据库表名
- String tableName = root.attributeValue("tableName");
- //根节点的第三项为类名
- String elementName = root.attributeValue("objName");
- //new一个名为elementName的类
- Object obj = Class.forName(elementName).newInstance();
- //取XML根节点下名为elementName的子节点,并暂时存放为list
- List<Element> elements = root.elements(elementName);
- //遍历XML中取得的elements
- for (Element item : elements) {
- //新建一个类来专门对应每一个对应的emement
- Object objTemp = obj.getClass().newInstance();
- //访问类中所有的字段
- Field[] fields = obj.getClass().getDeclaredFields();
- //遍历类中的每一个字段
- for (int i = 0; i < fields.length; i++) {
- if (fields[i].getName().equals("serialVersionUID"))
- continue;
- if (item.elementIterator(fields[i].getName()).hasNext()) {
- boolean accessFlag = fields[i].isAccessible();
- fields[i].setAccessible(true);
- //取得对应字段的值
- String textTemp = item.element(fields[i].getName())
- .getText();
- //取得对应字段的类型
- String propertyType = fields[i].getType().getName();
- //若值不为空,将对应字段的值转化为对应类型后存入Object对应的字段fields
- if ((textTemp != null) && (!textTemp.trim().equals(""))) {
- if (propertyType.endsWith("String"))
- fields[i].set(objTemp, textTemp);
- else if ("char".equals(propertyType))
- fields[i].set(objTemp,
- Character.valueOf(textTemp.charAt(0)));
- else if (("int".equals(propertyType))
- || (propertyType.endsWith("Integer")))
- fields[i].set(objTemp, Integer.valueOf(Integer
- .parseInt(textTemp)));
- else if (("boolean".equals(propertyType))
- || (propertyType.endsWith("Boolean")))
- fields[i].set(objTemp, Boolean.valueOf(Boolean
- .parseBoolean(textTemp)));
- else if (("byte".equals(propertyType))
- || (propertyType.endsWith("Byte")))
- fields[i].set(objTemp,
- Byte.valueOf(Byte.parseByte(textTemp)));
- else if (("short".equals(propertyType))
- || (propertyType.endsWith("Short")))
- fields[i].set(objTemp, Short.valueOf(Short
- .parseShort(textTemp)));
- else if (("double".equals(propertyType))
- || (propertyType.endsWith("Double")))
- fields[i].set(objTemp, Double.valueOf(Double
- .parseDouble(textTemp)));
- else if (("long".equals(propertyType))
- || (propertyType.endsWith("Long")))
- fields[i].set(objTemp,
- Long.valueOf(Long.parseLong(textTemp)));
- else if (("float".equals(propertyType))
- || (propertyType.endsWith("Float")))
- fields[i].set(objTemp, Float.valueOf(Float
- .parseFloat(textTemp)));
- else if (propertyType.endsWith("BigInteger"))
- fields[i]
- .set(objTemp, new BigInteger(textTemp));
- else if (propertyType.endsWith("BigDecimal"))
- fields[i]
- .set(objTemp, new BigDecimal(textTemp));
- else if ((!"void".equals(propertyType))
- && (!propertyType.endsWith("Void"))) {
- if (propertyType.endsWith("Date"))
- fields[i].set(objTemp,
- DateTool.parseDate(textTemp, null));
- else if (propertyType.equals("[B")) {
- fields[i].set(objTemp,
- decoder.decodeBuffer(textTemp));
- }
- }
- }
- fields[i].setAccessible(accessFlag);
- }
- }
- list.add(objTemp);
- }
- return new String[] { mode, tableName };
- } catch (Exception e) {
- log.error("dom转为list失败:", e);
- }
- return (String[]) null;
- }
转载于:https://blog.51cto.com/xuepiaoqiyue/794482