废话
网上教程一大堆,简单直接能用的,不多,各种都是解析出来千奇百怪,后来研究了一下,主要问题其实就出在于xml文件,一个节点是对象还是列表,这个不太好区分,如果本身是列表,但是这个列表只有一条数据,这种情况就是容易误判了。
json 转 xml 的这里就忽略了,没难度,网上随便一搜一大堆。
导包
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
直接上工具类
public class XmlToJsonUtils {
public static String xmlToJson(String xmlPath) {
try {
// 创建一个SAXReader解析器
SAXReader reader = new SAXReader();
// 读取xml文件,转换成Document结点
Document doc = reader.read(new File(xmlPath));
// 递归打印xml文档信息
JSONObject jsonObject = xmlToJsonRoot(doc);
return jsonObject.toJSONString();
} catch (DocumentException e) {
e.printStackTrace();
}
return null;
}
/**
* xml转json对象
*
* @param document
* @return
*/
public static JSONObject xmlToJsonRoot(Document document) {
// 取根节点
Element root = document.getRootElement();
List<Element> elements = root.elements();
JSONObject jsonObject = new JSONObject();
jsonObject.put(root.getName(), elementToJson(elements));
return jsonObject;
}
/**
* 递归读取节点,并简单判定节点状态(值、对象、列表三种状态)
*
* @param elements
* @return
*/
public static Object elementToJson(List<Element> elements) {
Object object = null;
if (elements.isEmpty()) {
return object;
}
if (elements.size() == 1) {
//只有一条,算对象
JSONObject jsonObject = new JSONObject();
Element element = elements.get(0);
List<Element> children = element.elements();
if (!children.isEmpty()) {
jsonObject.put(element.getName(), elementToJson(children));
} else {
jsonObject.put(element.getName(), element.getText());
}
object = jsonObject;
return object;
}
if (!elements.get(0).getName().equals(elements.get(1).getName())) {
//同一层级的名称不一样,不是列表
JSONObject jsonObject = new JSONObject();
for (Element element : elements) {
List<Element> children = element.elements();
if (!children.isEmpty()) {
jsonObject.put(element.getName(), elementToJson(children));
} else {
jsonObject.put(element.getName(), element.getText());
}
}
object = jsonObject;
return object;
}
//同一层级的名称一样,是列表
List<JSONObject> jsonList = new ArrayList<>();
for (Element element : elements) {
JSONObject jsonObject = new JSONObject();
List<Element> children = element.elements();
if (!children.isEmpty()) {
jsonObject = (JSONObject) elementToJson(children);
} else {
jsonObject.put(element.getName(), element.getText());
}
jsonList.add(jsonObject);
}
object = jsonList;
return object;
}
}
调用
IndexSecurities securities = JSON.parseObject(XmlToJsonUtils.xmlToJson(filePath), IndexSecurities.class);
|