大家好,又见面了,我是你们的朋友全栈君。
使用dom4j解析xml
首先在项目中加入dom4j的依赖
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6</version>
</dependency>
附上基于dom4j解析xml的工具类
/* * Copyright © 1998 - 2018 Tencent. All Rights Reserved * www.tencent.com * All rights reserved. */
package com.tencent.tusi.iot.utils;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import static com.tencent.tusi.iot.common.PublicConfig.*;
/** * @author shanpeng */
// 解析xml字符串的工具类
public class XMLUtils{
/** * 获取xml对象的根节点 * @param document * @return root */
public static Element getRoot(Document document){
Element root = null;
root = document.getRootElement();
return root;
}
/** * 获取fieldName的属性值 * @param document * @return fields */
public static List<String> getFields(Document document){
List<String> fields = new ArrayList<>();
Element root = getRoot(document);
if (null != root){
// 存储遍历节点
for (Iterator i = root.elementIterator(); i.hasNext();) {
Element el = (Element) i.next();
for (Iterator j = el.elementIterator(FIELD); j.hasNext();){
Element e2 = (Element) j.next();
Attribute attribute = e2.attribute(FIELDNAME);
fields.add(attribute.getValue());
}
}
}
return fields;
}
/** * 根获取每行数据形成一个列表 * @param document * @return rows */
public static List<Element> getRows(Document document){
List<Element> rows = new ArrayList<>();
Element root = getRoot(document);
List<String> fields = getFields(document);
if (!fields.isEmpty()){
for (Iterator i = root.elementIterator(); i.hasNext();) {
Element el = (Element) i.next();
for (Iterator k = el.elementIterator(ROW);k.hasNext();){
// 一行数据
Element e2 = (Element) k.next();
rows.add(e2);
}
}
}
return rows;
}
/** * 根据url获取xml对象 * @param url * @return document */
public static Document getXmlFromUrl(String url) throws DocumentException{
Document document=null;
SAXReader saxReader = new SAXReader();
document = saxReader.read(url);
return document;
}
/** * 根据xml字符串获取xml对象 * @param xmlString * @return document */
public static Document getXmlFromString(String xmlString) throws DocumentException {
Document document = DocumentHelper.parseText(xmlString);
return document;
}
/** * xml一行转对象 * @param document * @param clazz * @param row * @return * row ---> pojo */
public static Object getObject(Document document,Class<?> clazz,Element row) {
Object obj=null;
try {
obj=clazz.newInstance();//创建对象
List<String> fields = getFields(document);
// 获取属性名
for(int i=0;i<fields.size();i++){
String propertyname = fields.get(i);
String propertyvalue = row.attribute(fields.get(i)).getValue();
Method method = obj.getClass().getMethod("set"+propertyname,String.class);
method.invoke(obj,propertyvalue);
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
public static void main(String[] args) throws DocumentException {
}
}
}
因为工作中接收的数据都是固定格式的,所以其中ROW、FIELD、FIELDNAME放在常量里面。
注意点:
Method method = obj.getClass().getMethod("set"+propertyname,String.class);
method.invoke(obj,propertyvalue);
该代码块中只能识别为String类型的属性,所以使用getObject时务必使传过来的类中的属性全部是String类型的,具体使用时再做转换。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152052.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...