推薦,這種轉化方法,能將xml的所有屬性方法,全部轉化為json
<dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.41</version> </dependency>
工具類
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class XmlTool {
/**
* String 轉 org.dom4j.Document
* @param xml
* @return
* @throws DocumentException
*/
public static Document strToDocument(String xml){
try {
//加上xml標簽是為了獲取最外層的標簽,如果不需要可以去掉
return DocumentHelper.parseText("<xml>"+xml+"</xml>");
} catch (DocumentException e) {
return null;
}
}
/**
* org.dom4j.Document 轉 com.alibaba.fastjson.JSONObject
* @param xml
* @return
* @throws DocumentException
*/
public static JSONObject documentToJSONObject(String xml){
return elementToJSONObject(strToDocument(xml).getRootElement());
}
/**
* org.dom4j.Element 轉 com.alibaba.fastjson.JSONObject
* @param node
* @return
*/
public static JSONObject elementToJSONObject(Element node) {
JSONObject result = new JSONObject();
// 當前節點的名稱、文本內容和屬性
List<Attribute> listAttr = node.attributes();// 當前節點的所有屬性的list
for (Attribute attr : listAttr) {// 遍歷當前節點的所有屬性
result.put(attr.getName(), attr.getValue());
}
// 遞歸遍歷當前節點所有的子節點
List<Element> listElement = node.elements();// 所有一級子節點的list
if (!listElement.isEmpty()) {
for (Element e : listElement) {// 遍歷所有一級子節點
if (e.attributes().isEmpty() && e.elements().isEmpty()) // 判斷一級節點是否有屬性和子節點
result.put(e.getName(), e.getTextTrim());// 沒有則將當前節點作為上級節點的屬性對待
else {
if (!result.containsKey(e.getName())) // 判斷父節點是否存在該一級節點名稱的屬性
result.put(e.getName(), new JSONArray());// 沒有則創建
((JSONArray) result.get(e.getName())).add(elementToJSONObject(e));// 將該一級節點放入該節點名稱的屬性對應的值中
}
}
}
return result;
}
}
測試:
public static void main(String[] args) {
String result = "<applications>"
+"<versions__delta>1</versions__delta>"
+"<apps__hashcode></apps__hashcode>"
+"</applications>";
System.out.println(XmlTool.documentToJSONObject(result).toJSONString());
}
