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. Eclipse优化之设置不自动弹出控制台和Server

    有时候Eclipse启动,控制台console不会自动跳出来,需要手工点击该选项卡才行, 按下面的设置,可以让它自动跳出来(或不跳出来): windows  ->   preferences   ...

  2. HTML连载43-还原字体和字号、文字界面

    一.还原字体和字号 1.利用fireworks切片以及文本添加的功能可以用来定位我们想要的文字是什么字体,行高又是多少,但其实很low,是我们人工挑选出来的. 2.注意点:在企业开发中,如果一个盒子中 ...

  3. 《细说PHP》第四版 样章 第二章 PHP的应用与发展 1

    <细说PHP>第四版 样章 第二章 PHP的应用与发展 1 学习任何编程语言之前,先了解一下它的应用与发展是很有必要的.从Web开发的历史看来,PHP.Python和Ruby几乎是同时出现 ...

  4. Jenkins操作学习 --邮箱配置及测试结果构建

    前言 使用jenkins做持续集成工具,构建的整个过程中,肯定要对结果进行记录和跟踪,这里我们以qq邮箱为例,来讲解如何配置jenkins的邮箱及发送构建结果 一.明确邮箱服务器相关信息 这里我们,要 ...

  5. WebJar的打包和使用

    前言 WebJar官网:https://www.webjars.org/,对于任何与Servlet 3兼容的容器,WEB-INF/lib目录中的webjar都会自动作为静态资源提供.这是因为WEB-I ...

  6. windows环境下安装配置MongoDB

    版本选择MongoDB的版本命名规范如:x.y.z: y为奇数时表示当前版本为开发版,如:2.3.0.2.1.1: y为偶数时表示当前版本为稳定版,如:2.0.1.2.2.0: 目前官网上最新的版本为 ...

  7. asp.net 关于gridview使用的一些小技巧

    gridview中嵌套控件示例 —— 添加了一个linkbutton 前台: <asp:GridView ID="gv2" runat="server" ...

  8. PHP中设计模式以及魔术方法

    1.设计模式        1.1单例模式        口诀:三私一公 1.私有的静态属性用来保存对象的单例 2.私有的构造方法用来阻止在类的外部实例化 3.私有的__clone阻止在类的外部clo ...

  9. Java生鲜电商平台-深刻理解电商的库存架构与解决方案

    Java生鲜电商平台-深刻理解电商的库存架构与解决方案 说明:一般电商的库存都是跟SKU相关联的,那么怎么样才能进行SKU的库存管理呢?有以下几种方式与方法: 一.七大库存分类 首先得学习什么是库存, ...

  10. python web框架Django——ORM

    ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...