将XML格式的参数转换成Json数据
- 需要导入dom4j包,具体代码如下:
package com.jeeplus.common.utils;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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;
}
/**
* 遍历元素
* @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>";
JSONObject jsonObject = xmltoJson(xml);
System.out.println(jsonObject);
}
}
- 使用Jdom来遍历其节点的所有值
package exter;
import java.io.StringReader;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.xml.sax.InputSource;
public class getTest {
/**
* @param args
*/
public static void main(String[] args) {
String param = "";
param += "<?xml version='1.0' encoding='utf-8'?>";
param += "<root>";
param += "<body>";
param += "<TransCode>3002</TransCode>";
param += "<Result>1</Result>";
param += "<AddWord>成功</AddWord>";
param += "<SeqNo>00743460</SeqNo>";
param += "<TransDate>20180826</TransDate>";
param += "<TransTime>134305</TransTime>";
param += "<IAcctNo>00001994800029</IAcctNo>";
param += "<IAcctNoName>测试测试</IAcctNoName>";
param += "<AuthCode>2018082613430500743460</AuthCode>";
param += "</body>";
param += "</root>";
try {
// 定义接收参数
String result = "";
String account = "";
// 创建一个新的字符串
StringReader read = new StringReader(param);
// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
// 创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
// 通过输入源构造一个Document
Document doc = (Document) sb.build(source);
// 取的根元素
Element root = (Element) doc.getRootElement();
// 得到根元素所有子元素的集合
List jiedian = root.getChildren();
Element et = null;
et = (Element) jiedian.get(0);
List childrenNode = et.getChildren();
for (int i = 0; i < childrenNode.size(); i++) {
Element elet = (Element) childrenNode.get(i);// 循环依次得到子元素
System.out.println(elet.getName() + " | " + elet.getText());
System.out.println("---------------------");
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
遍历值的时候需要导入Jdom包,使用maven配置如下:
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>2.0.5</version>
</dependency>
参数的解析,还是花了点时间的,最后回过头来看的时候,觉得还是自己做的太少,太菜吧!现在记录一下,要是有需要的人可以参考一下。