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. Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) D2. Optimal Subsequences (Hard Version) 数据结构 贪心

    D2. Optimal Subsequences (Hard Version) This is the harder version of the problem. In this version, ...

  2. 向技术领先的华为说No,就是对国家的通信前景说No!

    历史已经证明了,任何一项可以加速人员.物资.能源.金钱.信息迁移的技术,都会让社会原有的生产力成倍地增长.中国在互联网.移动互联网保持令整个世界震惊的飞速发展,以BAT为首的诸多商业帝国建立,还有人们 ...

  3. C# params 可变参数使用注意

    今天在一个 .NET Core 项目中调用一个自己实现的使用 params 可变参数的方法时触发了 null 引用异常,原以为是方法中没有对参数进行 null 值检查引起的,于是加上 check nu ...

  4. C语言程序设计100例之(12):Eratosthenes筛法求质数

    例12   Eratosthenes筛法求质数 问题描述 Eratosthenes筛法的基本思想是:把某范围内的自然数从小到大依次排列好.宣布1不是质数,把它去掉:然后从余下的数中取出最小的数,宣布它 ...

  5. Redis缓存雪崩,缓存穿透,热点key解决方案和分析

    缓存穿透 缓存系统,按照KEY去查询VALUE,当KEY对应的VALUE一定不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力. (查询一个必然不存在的数据.比如文章表,查询一个不存 ...

  6. IT兄弟连 HTML5教程 HTML5行业的发展预测

    现在的互联网市场上,HTML5在快速地成长,甚至是未来几年里将会有很多公司进入HTML5这个领域,HTML5也会像传统的Flex,Flash,Silverlight和Objective-C那样,更容易 ...

  7. 关于 ASP.NET Core 中的 RazorPages

    Contact.cshtml @page @model ContactModel @{ ViewData["Title"] = "Contact"; } < ...

  8. JVM GC系列 — GC算法

    一.前言 从本篇文章开始,将开始一个新的系列JVM.JVM是一个非常庞大且复制的技术体系,但是对于程序猿的升级,走向更高阶所必要经历的,曾经也下决心要好好学习一番,然而毅力不足都中途放弃. GC的作用 ...

  9. 使用 Powershell 远程连接 windows server

    使用 Powershell 远程连接 windows server Intro 最近我们的开发环境增加了一个 windows 服务器,没有界面的,不能直接远程桌面连上去管理,需要使用 Powershe ...

  10. Linux常用命令(2)

    3.帮助命令 A,帮助命令:man    B,其他帮助命令 3.1,格式:man [命令名] 查看命令拥有哪个级别的帮助:                                       ...