wg-basic/basic-util/src/main/java/ink/wgink/util/xml/XMLUtil.java

70 lines
2.2 KiB
Java
Raw Normal View History

2021-04-28 12:01:59 +08:00
package ink.wgink.util.xml;
import ink.wgink.util.ReflectUtil;
import org.apache.commons.collections.KeyValue;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: XMLUtil
* @Description: XML工具类
* @Author: wanggeng
* @Date: 2021/4/28 9:44 上午
* @Version: 1.0
*/
public class XMLUtil {
/**
* XML转简单beanbean属性类型为字符串
*
* @param xml
* @param clazz
* @param <T>
* @return
* @throws Exception
*/
public static <T> T xml2SampleBean(String xml, Class<T> clazz) throws Exception {
if (StringUtils.isBlank(xml)) {
return null;
}
Field[] fields = clazz.getDeclaredFields();
Map<String, String[]> getSetMethodMap = ReflectUtil.fieldGetSetMethod(fields);
if (getSetMethodMap == null) {
return null;
}
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));
Element rootElement = document.getRootElement();
List<Element> elements = rootElement.elements();
if (elements.isEmpty()) {
return null;
}
T t = clazz.newInstance();
for (Element element : elements) {
String elementName = element.getName();
String firstLower = elementName.substring(0, 1).toLowerCase();
String firstLowerMethodName = firstLower + elementName.substring(1);
String[] getSetMethodArray = getSetMethodMap.get(firstLowerMethodName);
Method setMethod = clazz.getMethod(getSetMethodArray[1], String.class);
String elementText = element.getTextTrim();
setMethod.invoke(t, StringUtils.isBlank(elementText) ? "" : elementText);
}
return t;
}
}