package com.lieni.ruyu.api.xmlTool;java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;node
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;json
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;api
public class XmlToJson {
/**
* 將xml轉換爲JSON對象
*
* @param xml xml字符串
* @return
* @throws Exception
*/
public static JSONObject xmltoJson(String xml) throws Exception {
JSONObject jsonObject = new JSONObject();
Document document = DocumentHelper.parseText(xml);
// 獲取根節點元素對象
Element root = document.getRootElement();
iterateNodes(root, jsonObject);
return jsonObject;
}dom
/**
* 遍歷元素
*
* @param node 元素
* @param json 將元素遍歷完成以後放的JSON對象
*/
@SuppressWarnings("unchecked")
public static void iterateNodes(Element node, JSONObject json) {
// 獲取當前元素的名稱
String nodeName = node.getName();
// 判斷已遍歷的JSON中是否已經有了該元素的名稱
if (json.containsKey(nodeName)) {
// 該元素在同級下有多個
Object Object = json.get(nodeName);
JSONArray array = null;
if (Object instanceof JSONArray) {
array = (JSONArray) Object;
} else {
array = new JSONArray();
array.add(Object);
}
// 獲取該元素下全部子元素
List<Element> listElement = node.elements();
if (listElement.isEmpty()) {
// 該元素無子元素,獲取元素的值
String nodeValue = node.getTextTrim();
array.add(nodeValue);
json.put(nodeName, array);
return;
}
// 有子元素
JSONObject newJson = new JSONObject();
// 遍歷全部子元素
for (Element e : listElement) {
// 遞歸
iterateNodes(e, newJson);
}
array.add(newJson);
json.put(nodeName, array);
return;
}
// 該元素同級下第一次遍歷
// 獲取該元素下全部子元素
List<Element> listElement = node.elements();
if (listElement.isEmpty()) {
// 該元素無子元素,獲取元素的值
String nodeValue = node.getTextTrim();
json.put(nodeName, nodeValue);
return;
}
// 有子節點,新建一個JSONObject來存儲該節點下子節點的值
JSONObject object = new JSONObject();
// 遍歷全部一級子節點
for (Element e : listElement) {
// 遞歸
iterateNodes(e, object);
}
json.put(nodeName, object);
return;
}測試
/**
* 測試的main方法
*/
public static void main(String[] args) throws Exception {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<root>" + " <mdcardno>查詢卡號</mdcardno>"
+ " <count>返回明細條數</count>" + " <rd>" + " <trxzone>交易地區號1</trxzone>"
+ " <trxcurr>交易幣種1</trxcurr>" + " </rd>" + " <rd>" + " <trxzone>交易地區號3</trxzone>"
+ " <trxcurr>交易幣種3</trxcurr>" + " </rd>" + " <rd>" + " <trxzone>交易地區號2</trxzone>"
+ " <trxcurr>交易幣種2</trxcurr>" + "</rd>" + "</root>";.net
String fileName = "C:\\Users\\rysh101\\Desktop\\工做資料\\xxx.xml";
String readToString = readToString(fileName);
JSONObject jsonObject = xmltoJson(readToString);
System.out.println(jsonObject);
}xml
/**
*
* 功能描述: <br>
* 〈功能詳細描述〉將文本文件內容讀取成字符串
*
* @param fileName 文件地址
* @return
*/
public static String readToString(String fileName) {
String encoding = "GBK";
File file = new File(fileName);
Long filelength = file.length();
byte[] filecontent = new byte[filelength.intValue()];
try {
FileInputStream in = new FileInputStream(file);
in.read(filecontent);
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
return new String(filecontent, encoding);
} catch (UnsupportedEncodingException e) {
System.err.println("The OS does not support " + encoding);
e.printStackTrace();
return null;
}
}
}對象