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. mysql--事务详解

    事务的四大特性: # 原子性(atomicity) 一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作 ...

  2. Yii2处理密码加密及验证

    在Yii2中提供了密码加密以及验证的一系列方法,方便我们的使用,它使用的是bcrypt算法.查看源码我们可以发现它使用的是PHP函数password_hash()和crypt()生成. 加密: /** ...

  3. 立足于运维与监控的前端框架 NoahV

    NoahV是一个致力于解决中后台前端效率问题的前端框架,立足于运维和监控的应用场景,使用当前前端最新的技术栈并结合团队在项目开发中的最佳实践从而推出的前端开发框架. NoahV提供的功能覆盖了从开发到 ...

  4. Linux系统管理图文详解超详细精心整理

    前言:带你遨游于linux系统管理知识的海洋,沐浴春日里的阳光,循序渐进,看完之后收获满满. 本次讲解基于linux(centos6.5)虚拟机做的测试,centos7估计以后有时间再更新啊. lin ...

  5. 2019 年 GitHub 上最热门的 Java 开源项目

    1.JavaGuide https://github.com/Snailclimb/JavaGuide Star 22668 [Java 学习 + 面试指南] 一份涵盖大部分 Java 程序员所需要掌 ...

  6. Django之Django快速体验

    Django快速体验 前语: 这一节内容是直接快速上手,后面的内容是对内容进行按步解释,如果不想看解析的,可以直接只看这一节的内容. 1.新建项目应用新建项目test1新建应用booktest 2.注 ...

  7. 2018-2-13-win10-UWP-MessageDialog-和-ContentDialog

    原文:2018-2-13-win10-UWP-MessageDialog-和-ContentDialog title author date CreateTime categories win10 U ...

  8. Oracle:Redhat 7.4+Oracle Rac 11.2.0.4 执行root.sh报错处理

    一.报错信息 二.原因分析 因为RHEL 7使用systemd而不是initd运行进程和重启进程,而root.sh通过传统的initd运行ohasd进程 三.解决办法 在RHEL 7中ohasd需要被 ...

  9. JS原生对象实现异步请求以及JQ的ajax请求四种方式

    一.JS原生方式异步请求 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="A ...

  10. 4-1-JS数据类型及相关操作

    js的数据类型 判断数据类型 用typeof   typeof "John"                 // alert(typeof "John") 返 ...