1、jar包

<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>xom</groupId>
<artifactId>xom</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>

2、工具类

package com.jbf.util;

import com.alibaba.fastjson.JSONObject;
import net.sf.json.xml.XMLSerializer;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List; /*********************************
* 类描述:
* @author huangsz
* @date 2019/11/20
* @version v1.0
**********************************/
public class XmlUtil { public static Object xmlToBean(Element rootElt, Class pojo) throws Exception {
// 首先得到pojo所定义的字段
Field[] fields = pojo.getDeclaredFields();
// 根据传入的Class动态生成pojo对象
Object obj = pojo.newInstance();
for (Field field : fields) {
// 设置字段可访问(必须,否则报错)
field.setAccessible(true);
// 得到字段的属性名
String name = field.getName();
// 这一段的作用是如果字段在Element中不存在会抛出异常,如果出异常,则跳过。
try {
rootElt.elementTextTrim(name);
}
catch (Exception ex) {
continue;
}
if (rootElt.elementTextTrim(name) != null && !"".equals(rootElt.elementTextTrim(name))) {
// 根据字段的类型将值转化为相应的类型,并设置到生成的对象中。
if (field.getType().equals(Long.class) || field.getType().equals(long.class)){
field.set(obj, Long.parseLong(rootElt.elementTextTrim(name)));
} else if (field.getType().equals(String.class)) {
field.set(obj, rootElt.elementTextTrim(name));
} else if (field.getType().equals(Double.class) || field.getType().equals(double.class))
{
field.set(obj, Double.parseDouble(rootElt.elementTextTrim(name)));
} else if (field.getType().equals(Integer.class) || field.getType().equals(int.class))
{
field.set(obj, Integer.parseInt(rootElt.elementTextTrim(name)));
} else if (field.getType().equals(java.util.Date.class))
{
field.set(obj, Date.parse(rootElt.elementTextTrim(name)));
} else {
continue;
}
}
}
return obj;
} public static <T> T xmlToBean(String xml,Class<T> clazz) {
T t = null;
try {
List<T> ts = xmlToList(xml, clazz);
if (!ts.isEmpty()) {
t = ts.get(0);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("数据解析错误"); }
return t;
} /**
* DMO4J写入XML
* @param obj 泛型对象
* @param entityPropertys 泛型对象的List集合
*/
public static <T> String beanToXml(T obj, List<T> entityPropertys) {
//效率检测
long lasting = System.currentTimeMillis();
String xmlStr = null;
try {
Document document = DocumentHelper.createDocument();
// 获得类名
String rootname = obj.getClass().getSimpleName();
// 添加根节点
Element root = document.addElement(rootname+"s");
// 获得实体类的所有属性
Field[] properties = obj.getClass().getDeclaredFields();
// 递归实体
for (T t : entityPropertys) {
// 二级节点
Element secondRoot = root.addElement(rootname);
for (int i = 0; i < properties.length; i++) {
// 反射get方法
Method meth = t.getClass().getMethod(
"get"
+ properties[i].getName().substring(0, 1)
.toUpperCase()
+ properties[i].getName().substring(1));
// 为二级节点添加属性,属性值为对应属性的值
secondRoot.addElement(properties[i].getName()).setText(
meth.invoke(t).toString()); }
}
xmlStr = document.asXML();
System.out.println("document字符串"+xmlStr);
long lasting2 = System.currentTimeMillis();
System.out.println("写入XMLtoString结束,用时"+(lasting2 - lasting)+"ms");
} catch (Exception e) {
System.out.println("XML文件写入失败");
e.printStackTrace();
}
return xmlStr;
} /**
*
* @param XMLPathAndName XML文件的路径和地址
* @param t 泛型对象
* @return
*/
public static <T> List<T> xmlToList(String XMLPathAndName, Class<T> t) {
long lasting = System.currentTimeMillis();
List<T> list = new ArrayList<>();
try {
Document doc = DocumentHelper.parseText(XMLPathAndName);
// 获得根节点
Element root = doc.getRootElement();
// 二级节点
Element foo;
Iterator i = root.elementIterator();
while (i.hasNext()) {
// 下一个二级节点
foo = (Element) i.next();
T t2 = (T)xmlToBean(foo, t);
list.add(t2);
}
} catch (Exception e) {
e.printStackTrace();
}
long lasting2 = System.currentTimeMillis();
System.out.println("读取XMLtoString结束,用时"+(lasting2 - lasting)+"ms");
return list;
} public static JSONObject xml2Json(String xml){
XMLSerializer xmlSerializer = new XMLSerializer();
String read = xmlSerializer.read(xml).toString();
return JSONObject.parseObject(read);
} public static String json2Xml(net.sf.json.JSONObject json, String rootName) throws DocumentException {
String sXml = "";
XMLSerializer xmlSerializer = new XMLSerializer();
xmlSerializer.setTypeHintsEnabled(false);
xmlSerializer.setRootName(rootName);
String sContent = xmlSerializer.write(json,"utf-8");
try {
Document docCon = DocumentHelper.parseText(sContent);
sXml = docCon.getRootElement().asXML();
} catch (DocumentException e) {
e.printStackTrace();
}
return sXml;
} }

3、测试验证

javaBean类:

public class TestBean {

    private int id;
private String dealTime;
private String status; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getDealTime() {
return dealTime;
} public void setDealTime(String dealTime) {
this.dealTime = dealTime;
} public String getStatus() {
return status;
} public void setStatus(String status) {
this.status = status;
} @Override
public String toString() {
return "TestBean{" +
"id=" + id +
", dealTime='" + dealTime + '\'' +
", status='" + status + '\'' +
'}';
}
}
package com.jbf.util;

import com.alibaba.fastjson.JSONObject;

import java.util.List;

/*********************************
* 类描述:
* @author huangsz
* @date 2019/11/20
* @version v1.0
**********************************/
public class App {
public static void readXml() {
try {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<TestBeans>" +
"<TestBean><id>1</id><dealTime>20070510165424</dealTime><status>2</status></TestBean>" +
// "<TestBean><id>2</id><dealTime>20070510165424</dealTime><status>2</status></TestBean>" +
// "<TestBean><id>3</id><dealTime>20070510165424</dealTime><status>2</status></TestBean>" +
// "<TestBean><id>4</id><dealTime>20070510165424</dealTime><status>2</status></TestBean>" +
// "<TestBean><id>5</id><dealTime>20070510165424</dealTime><status>2</status></TestBean>" +
"</TestBeans>";
List<TestBean> list = XmlUtil.xmlToList(xml, TestBean.class);
System.out.println("list = " + list.size());
for (TestBean bean : list) {
System.out.println(bean);
}
TestBean bean = XmlUtil.xmlToBean(xml, TestBean.class);
System.out.println(bean);
JSONObject jsonObject = XmlUtil.xml2Json(xml);
System.out.println(jsonObject);
//
String str = "{\"TestBean\":{\"dealTime\":\"20070510165424\",\"id\":\"1\",\"status\":\"2\"}}";
net.sf.json.JSONObject fromObject = net.sf.json.JSONObject.fromObject(str);
String testBeans = XmlUtil.json2Xml(fromObject, "TestBeans");
System.out.println(testBeans);
TestBean bean1 = XmlUtil.xmlToBean(testBeans, TestBean.class);
System.out.println(bean1);
} catch (Exception e) {
e.printStackTrace();
} } public static void main(String[] args) {
readXml();
} }

xml、bean、json互转工具,可直接CV就用的更多相关文章

  1. JavaScript实现XML与JSON互转代码(转载)

    下面来分享一个关于JavaScript实现XML与JSON互转例子,这里面介绍了国外的三款xml转json的例子,希望这些例子能给你带来帮助. 最近在开发在线XML编辑器,打算使用JSON做为中间格式 ...

  2. c++实现Xml和json互转【转】

    https://blog.csdn.net/kfy2011/article/details/51774242 1.下载c语言的cJson库源码,库很小,只有两个文件cJSON.c和cJSON.h.下载 ...

  3. SQL2008使用json.net实现XML与JSON互转

    借助CLR,首先实现字符串的互转,然后使用存储过程实现JSON2table     public class JsonFunction    {        /// <summary> ...

  4. JSONUtil(JAVA对象/List与json互转,xml与json互转)

    package com.chauvet.utils.json; import java.io.BufferedReader; import java.io.File; import java.io.F ...

  5. xml与json互转

    依赖包: <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib< ...

  6. C# :XML和JSON互转

    我们一般在用JSON或者XML作为数据交换的时候,可能定义一个没有真正意义方法的类,其实就是一个关于属性的数据结构,如果对于这种情况,可以将这个类对象作为中介,然后利用C#提供的序列化和反序列化的方法 ...

  7. xml和map互转工具类

    /** * xml转map工具类 * @author zhangyao * */ public class XmlToMapUtil { /** * xml转map 不带属性 * @param xml ...

  8. List集合和JSON互转工具类

    public class JsonListUtil { /** * List<T> 转 json 保存到数据库 */ public static <T> String list ...

  9. xml和json互转

    开发过程中有些时候需要把xml和json互转,如某钱X接口入参和出参都是xml格式的,十分蛋疼.特写下面工具类,以留用. 需要引用jar: <!-- https://mvnrepository. ...

随机推荐

  1. 《Effective-Ruby》读书笔记

    本篇是在我接触了 Ruby 很短一段时间后有幸捧起的一本书,下面结合自己的一些思考,来输出一下自己的读书笔记 前言 学习一门新的编程语言通常需要经过两个阶段: 第一个阶段是学习这门编程语言的语法和结构 ...

  2. CSharpGL(54)用基于图像的光照(IBL)来计算PBR的Specular部分

    CSharpGL(54)用基于图像的光照(IBL)来计算PBR的Specular部分 接下来本系列将通过翻译(https://learnopengl.com)这个网站上关于PBR的内容来学习PBR(P ...

  3. Spring框架的相关介绍

    Spring是一个开源轻量级的框架,它的核心是控制反转(IOC)和面向切面编程(AOP). 作为业务层框架的spring能够很好地整合表现层跟持久层. IOC:将类的创建和依赖关系写到配置文件里,可以 ...

  4. centos7下mysql5.7的安装与配置

    centos7下MySQL5.7的安装与配置 下载 下载地址 根据系统和版本选择红框中的四个RPM包下载即可,然后放到centos7系统中的/opt目录下,等待稍后安装. 安装前的准备 1. 检查系统 ...

  5. ElasticSearch安装中文分词器IK

    1.安装IK分词器,下载对应版本的插件,elasticsearch-analysis-ik中文分词器的开发者一直进行维护的,对应着elasticsearch的版本,所以选择好自己的版本即可.IKAna ...

  6. 3DES对称加密算法(ABAP 语言实现版)

    公司人事数据要求在系统间加密传输,而对接系统大部分是Java系统,要在不同的异构系统间能很好的加解密码,想到了标准的对称加密算法DES,因为是标准的算法,网络上存在大量公开用Java的DES算法,JA ...

  7. Z从壹开始前后端分离【 .NET Core2.2/3.0 +Vue2.0 】框架之九 || 依赖注入IoC学习 + AOP界面编程初探

    本文梯子 本文3.0版本文章 更新 代码已上传Github+Gitee,文末有地址 零.今天完成的绿色部分 一.依赖注入的理解和思考 二.常见的IoC框架有哪些 1.Autofac+原生 2.三种注入 ...

  8. springmvc学习笔记二:重定向,拦截器,参数绑定

    Controller方法返回值 返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view. 返回void 在Contro ...

  9. angular版聊天室|仿微信界面IM聊天|NG2+Node聊天实例

    一.项目介绍 运用angular+angular-cli+angular-router+ngrx/store+rxjs+webpack+node+wcPop等技术实现开发的仿微信angular版聊天室 ...

  10. webpack代码分离CommonsChunkPlugin插件的使用(防止重复)

    1.webpack.config.js中添加: const path = require('path'); + const webpack = require('webpack'); const HT ...