Java中接收xml格式的数据转Json以及解析节点的值

将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>

参数的解析,还是花了点时间的,最后回过头来看的时候,觉得还是自己做的太少,太菜吧!现在记录一下,要是有需要的人可以参考一下。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值