直接上代码
package com.XXX.service.util;
import com.xxx.sca.model.readxml.Result; // xml要转的javabean,需要自己根据实际需求定义;
import com.thoughtworks.xstream.XStream; // 使用XStream等技术
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.mapper.MapperWrapper;
import com.thoughtworks.xstream.security.AnyTypePermission;
import org.dom4j.io.SAXReader; // 引用dom4j技术
import java.io.File;
/**
* @ClassName: XStreamUtil
* @Description: JAVA解析xml文件工具类
* @Author: Chopper (18038120@qq.com)
* @Date: 2019-07-19 11:20
* @Version: 1.0
**/
public class XStreamUtil {
/**
* // xml 文件抬头
* @param
* @return
*/
private static String XML_TAG = "<?xml version='1.0' encoding='UTF-8'?>";
/**
* Description: 私有化构造
*/
private XStreamUtil() {
super();
}
/**
* // 为每次调用生成一个XStream
* @param
* @return xStream
*/
private static XStream getInstance() {
XStream xStream = new XStream(new DomDriver("UTF-8")) {
/**
* 忽略xml中多余字段
*/
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new MapperWrapper(next) {
@SuppressWarnings("rawtypes")
@Override
public boolean shouldSerializeMember(Class definedIn, String fieldName) {
if (definedIn == Object.class) {
return false;
}
return super.shouldSerializeMember(definedIn, fieldName);
}
};
}
};
// 使用本地的类加载器
xStream.setClassLoader(XStreamUtil.class.getClassLoader());
// 允许所有的类进行转换
xStream.addPermission(AnyTypePermission.ANY);
return xStream;
}
/**
* // 将xml字符串转化为java对象
* @param xml (String) clazz
* @return class cast
*/
public static T xmlToBean(String xml, Class clazz) {
XStream xStream = getInstance();
xStream.processAnnotations(clazz);
Object object = xStream.fromXML(xml);
T cast = clazz.cast(object);
return cast;
}
/**
* // 将java对象转化为xml字符串
* @param object
* @return String xml
*/
public static String beanToXml(Object object) {
XStream xStream = getInstance();
xStream.processAnnotations(object.getClass());
// 剔除所有tab、制表符、换行符
String xml = xStream.toXML(object).replaceAll("\\s+", " ");
return xml;
}
/**
* // 读取xml文件转为String
* @param xmlFileName , xmlUrl
* @return
*/
public static String xmlToString(String xmlFileName){
SAXReader saxReader=new SAXReader();
org.dom4j.Document document;
String xmlString="";
try {
document = saxReader.read(new File(xmlFileName));
xmlString=document.asXML();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
xmlString="";
}
//String xmlString = document.asXML();
return xmlString;
}
// main方法测试
public static void main(String[] args) {
// 先读取xml文件并转为String字符串
String xml = (String) xmlToString("/Users/joe/work/Project/test.wav.xml");
// 查看读取结果有没有问题
System.err.println(xml);
// 再将xml文件的String字符串转为自定义的javaBean
Result xmlResult = xmlToBean(xml, Result.class);
// 查看bean对象结果
System.err.println(xmlResult.toString());
/* 1.转后的javabean可能存在问题:比如xml文件中 有 ... 标签,但是在转完bean之后,发现 count 和
duration 的值为null (count,duration 为String类型); 目前原因、解决办暂没找到;
2.此方法适用读取固定格式的xml文件;
*/
}
}
本人(java小白)日常工作中随笔记录点滴,希望广大开发者给与帮助或建议!!!
本人QQ: 18038120 (常在), 钉钉号: h18038120 (常在)
此致
敬礼!