一、之前java读取xml配置文件时,总是通过dom4j第三方库主动解析,最近发现可以通过jdk类库将xml转换pojo。
二、编写xml转化工具类XmlUtils
package com.moy.demo.common.utils; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import java.io.InputStream; import java.io.Reader; import java.io.StringReader; /** * [Project]:cloud-demo-master <br/> * [Email]:moy25@foxmail.com <br/> * [Date]:2018/4/30 <br/> * [Description]: <br/> * * @author YeXiangYang */ public abstract class XmlUtils { public static <T> T xmlFileToObject(String xmlFilePath, Class<T> clazz) { ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); try (InputStream inputStream = contextClassLoader.getResourceAsStream(xmlFilePath)) { JAXBContext context = JAXBContext.newInstance(clazz); Unmarshaller unmarshaller = context.createUnmarshaller(); T result = (T) unmarshaller.unmarshal(inputStream); return result; } catch (Exception e) { throw new RuntimeException("convert xml to POJO failure!", e); } } public static <T> T xmlStringToObject(String xmlString, Class<T> clazz) { try (Reader reader = new StringReader(xmlString)) { JAXBContext context = JAXBContext.newInstance(clazz); Unmarshaller unmarshaller = context.createUnmarshaller(); T result = (T) unmarshaller.unmarshal(reader); return result; } catch (Exception e) { throw new RuntimeException("convert xml string to POJO failure!", e); } } }
二、测试
a、第一步:定义一个xml配置文件如:cityList.xml
<?xml version="1.0" encoding="UTF-8" ?> <c c1="0"> <d d1="101020100" d2="上海" d3="shanghai" d4="上海"/> <d d1="101220101" d2="合肥" d3="hefei" d4="安徽"/> <d d1="101190101" d2="南京" d3="jiangshu" d4="江苏"/> <d d1="101010100" d2="北京" d3="beijing" d4="北京"/> <d d1="101270101" d2="成都" d3="chengdu" d4="四川"/> </c>