广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >实体类和xml文件如何相互转换
  • 496
分享到

实体类和xml文件如何相互转换

2024-04-02 19:04:59 496人浏览 独家记忆
摘要

这篇文章给大家分享的是有关实体类和xml文件如何相互转换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体代码如下:package com.pcq.entity; i

这篇文章给大家分享的是有关实体类和xml文件如何相互转换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

具体代码如下:

package com.pcq.entity;

import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFORMat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class XMLAndEntityUtil {
 private static Document document = DocumentHelper.createDocument();
 
 
 @SuppressWarnings("unused")
 private static boolean isXMLFile(String filePath) {
  File file = new File(filePath);
  if(!file.exists() || filePath.indexOf(".xml") > -1) {
   return false;
  }
  return true;
 }
 
 
 public static <T> void writeXML(List<T> list, String filePath) {
  Class<?> c = list.get(0).getClass();
  String root = c.getSimpleName().toLowerCase() + "s";
  Element rootEle = document.addElement(root);
  for(Object obj : list) {
   try {
    Element e = writeXml(rootEle, obj);
    document.setRootElement(e);
    writeXml(document, filePath);
   } catch (NoSuchMethodException | SecurityException
     | IllegalAccessException | IllegalArgumentException
     | InvocationTargetException e) {
    e.printStackTrace();
   }
  }
 }
 
 private static Element writeXml(Element root, Object object) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
  Class<?> c = object.getClass();
  String className = c.getSimpleName().toLowerCase();
  Element ele = root.addElement(className);
  Field[] fields = c.getDeclaredFields();
  for(Field f : fields) {
   String fieldName = f.getName();
   String param = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
   Element fieldElement = ele.addElement(fieldName);
   Method m = c.getMethod("get" + param, null);
   String s = "";
   if(m.invoke(object, null) != null) {
    s = m.invoke(object, null).toString();
   }
   fieldElement.setText(s);
  }
  return root;
 }
 
 
 public static <T> List<T> getEntitys(Class<T> c, String filePath) throws UnsupportedEncodingException, FileNotFoundException {
  return getEntitys(c, filePath, "utf-8");
 }
 
 public static <T> List<T> getEntitys(Class<T> c, String filePath, String encoding) throws UnsupportedEncodingException, FileNotFoundException {
  File file = new File(filePath);
  String labelName = c.getSimpleName().toLowerCase();
  SAXReader reader = new SAXReader();
  List<T> list = null;
   try {
   InputStreamReader in = new InputStreamReader(new FileInputStream(file), encoding);
   Document document = reader.read(in);
   Element root = document.getRootElement();
   List elements = root.elements(labelName);
   list = new ArrayList<T>();
   for(Iterator<Emp> it = elements.iterator(); it.hasNext();) {
     Element e = (Element)it.next();
     T t = getEntity(c, e);
     list.add(t);
    }
  } catch (DocumentException e) {
   e.printStackTrace();
  } catch (InstantiationException e1) {
   e1.printStackTrace();
  } catch (IllegalAccessException e1) {
   e1.printStackTrace();
  } catch (NoSuchMethodException e1) {
   e1.printStackTrace();
  } catch (SecurityException e1) {
   e1.printStackTrace();
  } catch (IllegalArgumentException e1) {
   e1.printStackTrace();
  } catch (InvocationTargetException e1) {
   e1.printStackTrace();
  }
  return list;
 }
 
 
 
 @SuppressWarnings("unchecked")
 private static <T> T getEntity(Class<T> c, Element ele) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
  Field[] fields = c.getDeclaredFields();
  Object object = c.newInstance();//
  for(Field f : fields) {
   String type = f.getType().toString();//获得字段的类型
   String fieldName = f.getName();//获得字段名称
   String param = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);//把字段的第一个字母变成大写
   Element e = ele.element(fieldName);
   if(type.indexOf("Integer") > -1) {//说明该字段是Integer类型
    Integer i = null;
    if(e.getTextTrim() != null && !e.getTextTrim().equals("")) {
     i = Integer.parseInt(e.getTextTrim());
    }
    Method m = c.getMethod("set" + param, Integer.class);
    m.invoke(object, i);//通过反射给该字段set值
   }
   if(type.indexOf("Double") > -1) { //说明该字段是Double类型
    Double d = null;
    if(e.getTextTrim() != null && !e.getTextTrim().equals("")) {
     d = Double.parseDouble(e.getTextTrim());
    }
    Method m = c.getMethod("set" + param, Double.class);
    m.invoke(object, d);
   }
   if(type.indexOf("String") > -1) {//说明该字段是String类型
    String s = null;
    if(e.getTextTrim() != null && !e.getTextTrim().equals("")) {
     s = e.getTextTrim();
    }
    Method m = c.getMethod("set" + param, String.class);
    m.invoke(object, s);
   }
  }
  return (T)object;
 }
 
 public static void writeXml(Document doc, String filePath, String encoding) {
  XMLWriter writer = null;
  OutputFormat format = OutputFormat.createPrettyPrint();
  format.setEncoding(encoding);// 指定XML编码  

  try {
   writer = new XMLWriter(new FileWriter(filePath), format);
   writer.write(doc);
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    writer.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }
 
 
 public static void writeXml(Document doc, String filePath) {
  writeXml(doc, filePath, "utf-8");
 }
}

假如有个实体类是:

package com.pcq.entity;

import java.io.Serializable;

public class Emp implements Serializable{

 private Integer id;
 private String name;
 private Integer deptNo;
 private Integer age;
 private String gender;
 private Integer bossId;
 private Double salary;
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Integer getDeptNo() {
  return deptNo;
 }
 public void setDeptNo(Integer deptNo) {
  this.deptNo = deptNo;
 }
 public Integer getAge() {
  return age;
 }
 public void setAge(Integer age) {
  this.age = age;
 }
 public String getGender() {
  return gender;
 }
 public void setGender(String gender) {
  this.gender = gender;
 }
 public Integer getBossId() {
  return bossId;
 }
 public void setBossId(Integer bossId) {
  this.bossId = bossId;
 }
 public Double getSalary() {
  return salary;
 }
 public void setSalary(Double salary) {
  this.salary = salary;
 }
 
}

那么写出来的xml文件格式如下:

<?xml version="1.0" encoding="utf-8"?>

<emps>
 <emp>
 <id>1</id>
 <name>张三</name>
 <deptNo>50</deptNo>
 <age>25</age>
 <gender>男</gender>
 <bossId>6</bossId>
 <salary>9000.0</salary>
 </emp>
 <emp>
 <id>2</id>
 <name>李四</name>
 <deptNo>50</deptNo>
 <age>22</age>
 <gender>女</gender>
 <bossId>6</bossId>
 <salary>8000.0</salary>
 </emp>
</emps>

假如有个实体类如下:

package com.pcq.entity;

public class Student {

 private Integer id;
 private String name;
 private Integer age;
 private String gender;
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Integer getAge() {
  return age;
 }
 public void setAge(Integer age) {
  this.age = age;
 }
 public String getGender() {
  return gender;
 }
 public void setGender(String gender) {
  this.gender = gender;
 }
 
}

那么写出来的xml文件如下

<?xml version="1.0" encoding="utf-8"?>

<students>
 <student>
 <id></id>
 <name>pcq</name>
 <age>18</age>
 <gender>男</gender>
 </student>
</students>

读取也必须读这种格式的xml文件,才能转换成实体类,要求是实体类的类类型信息(Class)必须要获得到。

另外这里的实体类的属性类型均是Integer,String,Double,可以看到工具类里只对这三种类型做了判断。而且可以预想的是,如果出现一对多的关系,即一个实体类拥有一组另一个类对象的引用,

那xml和实体类的相互转换要比上述的情况复杂的多。

感谢各位的阅读!关于“实体类和xml文件如何相互转换”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 实体类和xml文件如何相互转换

本文链接: https://www.lsjlt.com/news/75881.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 实体类和xml文件如何相互转换
    这篇文章给大家分享的是有关实体类和xml文件如何相互转换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体代码如下:package com.pcq.entity; i...
    99+
    2022-10-19
  • C#实现实体类和XML的相互转换
    一、实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerial...
    99+
    2022-11-13
  • C#怎么实现实体类和XML的相互转换
    这篇文章主要为大家展示了“C#怎么实现实体类和XML的相互转换”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#怎么实现实体类和XML的相互转换”这篇文章吧。一、实体类转换成XML将实体类转换成...
    99+
    2023-06-29
  • 如何使用JAXBContext实现Java和xml的互相转换
    这篇文章主要介绍了如何使用JAXBContext实现Java和xml的互相转换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JAXBContext实现Java和xml的互相转...
    99+
    2023-06-20
  • java中map与实体类的相互转换操作
    java中map与实体类的相互转换 1. 在 pom.xml 中引入依赖包 <dependency> <groupId>com.alibaba&l...
    99+
    2022-11-12
  • Java实体和JSON之间的相互转换
    Java实体和JSON之间的相互转换 一、先写一个测试用的Java实体二、将Java实体转化为Json1、基于com.alibaba.fastjson.JSON(1)、JSON.toJSONS...
    99+
    2023-09-10
    java json 开发语言
  • VB.NET如何实现图象文件和XML文件互换
    VB.NET如何实现图象文件和XML文件互换,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。通过.NET 框架下的FromBase64String和ToBase6...
    99+
    2023-06-17
  • python 实现docx与doc文件的互相转换
    因文件格式要求,需要将docx 与doc文件相互转换,特寻找python代码,与大家共分享 from win32com import client #转换doc为docx def...
    99+
    2022-11-11
  • labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换
    目录 1 labelimg标注VOC格式和yolo格式介绍 1.1 voc格式 1.2 yolo数据格式介绍 2 voc格式数据和yolo格式数据相互转换 2.1 voc转yolo代码 2.2 yolo转voc格式代码  1 label...
    99+
    2023-09-09
    深度学习 python list
  • 使用JAXBContext轻松实现Java和xml的互相转换方式
    JAXBContext实现Java和xml的互相转换 类文件注解:@XmlRootElement不可缺少 <span style="font-size:14px;">...
    99+
    2022-11-12
  • Java怎么实现Unicode和中文相互转换
    在Java中,可以使用java.nio.charset.StandardCharsets类和java.lang.String类来实现...
    99+
    2023-10-18
    Java
  • python中py文件与pyc文件相互转换的方法实例
    目录1、 compileall py文件转换为pyc1.1、compileall命令行模式1.2、compileall源码模式2、uncompyle6 pyc转换为py文件2.1、安...
    99+
    2022-11-10
  • C#实现Word和ODT文档相互转换详解
    目录程序环境方法1方法2格式转换1. Word转为ODTC#vb.net2. ODT转为WordC#vb.netODT文档格式一种开放文档格式(OpenDocument Text)。...
    99+
    2022-11-13
  • C#怎么实现Word和ODT文档相互转换
    本篇内容介绍了“C#怎么实现Word和ODT文档相互转换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ODT文档格式一种开放文档格式(Ope...
    99+
    2023-06-30
  • JAVA中变量类型间如何相互转换
    这篇文章主要为大家展示了“JAVA中变量类型间如何相互转换”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JAVA中变量类型间如何相互转换”这篇文章吧。Java的数据类型分为三大类,即布尔型、字符...
    99+
    2023-06-03
  • Java-json相关转换,JSONObject与实体类/map互转、List/List<map>和JSONArray互转、获取JSONObject中的key value、字符串String转换等
    博客背景是Java开发。json相关的转换、取值等在日常开发中经常使用,但有时候还是会忘记or遇到些奇奇怪怪的问题。以此记录,提醒自己~不定期更新~ 文章目录 1、JSONObject相关实体类和JSONObject互转Map和JS...
    99+
    2023-08-17
    java json list
  • 【PyTorch如何实现CPU、GPU相互转换?】
    拒绝CPU,PyTorch如何切换GPU计算? 问题的提出1.CPU_to_GPU——定义device对象2.CPU_to_GPU——.cuda()方法3.GPU_to_CPU——.cpuEn...
    99+
    2023-09-11
    pytorch 深度学习 python 人工智能
  • Go如何实现json字符串与各类struct相互转换
    目录json字符串与各类struct相互转换简单总结结构体转换为JSON字符串的一个坑来看一下这个例子json字符串与各类struct相互转换 不废话了都在代码中了 packag...
    99+
    2022-11-11
  • JS中base64和图片如何互相转换
    这篇文章将为大家详细讲解有关JS中base64和图片如何互相转换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。js将图片转化为base64var img&nbs...
    99+
    2022-10-19
  • Java中栈和队列如何相互转换
    这篇文章将为大家详细讲解有关Java中栈和队列如何相互转换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。栈和队列的本质是相同的,都只能在线性表的一端进行插入和删除。因此,栈和队列可以相互转换。用栈实现队列...
    99+
    2023-06-29
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作