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. 提取Office图标的方法

    需求 几年前,好声音以独特节目形式吸引了很多选手和观众的 观注,旨在"只寻找优质声音": 可声音各有特色时,还得看颜值,当然这也无可厚非.虽然扯得有点远,我想表达的是软件开发的稳定 ...

  2. Web自动化测试Selenium 学习笔记(一)

    1.Web自动化测试简介自动化基础:自动化用例编写.Selenium优势及原理.自动化环境搭建Selenium基础:常见8大元素定位(表格).常见元素处理.下拉框元素处理.不同窗口切换.元素进阶.元素 ...

  3. tensorflow2.0安装

    版本: python3.5 Anaconda 4.2.0 tensorflow2.0 cpu版本 1.安装命令 pip3 install tensorflow==2.0.0.0a0 -i https: ...

  4. IT兄弟连 Java语法教程 注释与编码规范

    在程序代码中适当地添加注释可以提高程序的可读性和可维护性.好的编码规范可以使程序更易阅读和理解.下面将介绍Java中的集中代码注释以及应该注意的编码规范. 代码注释 通过在程序代码中添加注释可提高程序 ...

  5. TCP协议 - 面向连接

    一.TCP特性概览 1.面向连接 TCP是基于连接进行数据交互,通信双方在进行数据交互之前需要建立连接,该连接也只能用在双方之间进行交互.这点不像UDP中的组播和广播,可以在同一组中多个主机交互数据. ...

  6. Redis for OPS 01:关于 Redis 基础说明与安装部署

    写在前面的话 本章节开始在主要介绍在运维工作中绕不开的一个话题,数据缓存 NoSQL 服务 Redis,搭建很简单,使用很简单,运行也稳定的一批,一般小公司几乎很少出现以为量的问题导致他 down 掉 ...

  7. 零基础学python,python视频教程

    零基础学python,python视频教程 这是我收集到的互联网上的视频资源,所有内容均来自互联网.仅供学习使用. 目前我在也在学习过程中,会把学习过程中遇到问题以及解决问题的方式,总结到我的公众号[ ...

  8. 关于python的十一道练习

    关于python的十一道练习 1.编写程序,输入一个自然数字符串,然后输出各位数字之和.例如,输入字符串1234,输出10. def sums1(): #第一题 strs=input('请输入一个自然 ...

  9. C#关闭多线程程序

    Process[] processes = System.Diagnostics.Process.GetProcesses(); //获得所有进程 foreach (Process p in proc ...

  10. H265码流分析

    H265相比较于H264,除了包含SPS.PPS外,还多包含一个VPS:在NALU header上,H.264的HALU header是一个字节,而H.265则是两个字节. 以OX4001为例,头信息 ...