使用DOM4J解析xml
程序员文章站
2022-05-28 21:09:47
...
最近项目需要导入大量的xml文件,将xml解析为json对象,为此写了一个工具类应对。
maven配置
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6</version>
</dependency>
import com.alibaba.fastjson.JSONObject;
import org.atm.dc.app.common.Constant;
import org.atm.dc.app.model.BaseModel.BaseModel;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.*;
public class XMLUtil {
private static SAXReader reader = null;
/**
* 初始化SAXReader
*
* @return
*/
private static SAXReader getSAXReader() {
if (reader == null) {
reader = new SAXReader();
}
return reader;
}
/**
* 根据xml文件路径获取节点
*
* @param path
* @return
*/
public static List<Element> getElements(String path) {
try {
InputStream in = new FileInputStream(path);
return getElement(in);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取节点集合
*
* @return
*/
public static List<Element> getElements(InputStream in) {
return getElement(in);
}
/**
* 获取节点集合
*
* @return
*/
public static List<Element> getElements(MultipartFile file) {
try {
InputStream in = file.getInputStream();
return getElement(in);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取节点集合
*
* @param in
* @return
*/
private static List<Element> getElement(InputStream in) {
try {
Document dom = getSAXReader().read(in);
Element root = dom.getRootElement();
return root.elements();
} catch (DocumentException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 获取集合数据
*
* @param elements
* @return
*/
public static List<JSONObject> getValues(List<Element> elements) {
List<JSONObject> list = new ArrayList<JSONObject>();
JSONObject map = null;
for (Element element : elements) {
List<Element> elementsChildren = element.elements();
map = new JSONObject();
for (Element e : elementsChildren) {
map.put(e.getName(), e.getStringValue());
}
list.add(map);
}
return list;
}
}
SAXReader 必须只有一个实例,最开始我每次都是new新的,发现出现了内存溢出的情况。总得来说dom4j挺好用的。
上一篇: 做面条怎么做好吃又营养
下一篇: 了解洋河酒价格,让我们选对适合自己的白酒
推荐阅读