java 解析xml格式文件

本文介绍了如何使用Java解析XML格式的字符串,通过getValueByNode方法获取特定节点值,以实例演示了获取'rtnMsg'和'rtnCode'的值,最后展示了完整的代码示例。

1、xml格式报文

        String rtnMsgXML = "<?xml version=\"1.0\" encoding='UTF-8'?>\n" +
                "<DBSET RESULT=\"1\">\n" +
                "<R>\n" +
                "<C N=\"rtnMsg\">短信发送失败</C>\n" +
                "<C N=\"rtnCode\">1</C>\n" +
                "</R>\n" +
                "</DBSET>";

2、解析报文核心方法

    public static Map<String, Object> getValueByNode(String xml, List<String> nodes, String charsetName) throws DocumentException, UnsupportedEncodingException {
        Document document = new SAXReader().read(new ByteArrayInputStream(xml.getBytes(charsetName)));
        Map<String, Object> result = new HashMap();
        nodes.forEach(node -> {
            String xpath = "//" + "R" + "//" + "C" + "[@N='"+node+"']";
            Node singleNode = document.selectSingleNode(xpath);
            if(singleNode != null) {
                result.put(node, singleNode.getStringValue());
            }
        });
        return result;
    }

3、调用xml报文解析方法完成解析

        List<String> nodes = new ArrayList<>();
        Map<String, Object> map1 = new HashMap<>();
        nodes.add("rtnMsg");
        nodes.add("rtnCode");
        map1 = getValueByNode(rtnMsgXML, nodes, "UTF-8");

注:map1返回格式

{"rtnMsg":"短信发送失败","rtnCode":"1"}

4、最终代码

import java.util.HashMap;
import java.util.List;
import java.util.Map;
public static void main(String[] args) {
        String rtnMsgXML = "<?xml version=\"1.0\" encoding='UTF-8'?>\n" +
                "<DBSET RESULT=\"1\">\n" +
                "<R>\n" +
                "<C N=\"rtnMsg\"></C>\n" +
                "<C N=\"rtnCode\">0</C>\n" +
                "</R>\n" +
                "</DBSET>";
        List<String> nodes = new ArrayList<>();
        Map<String, Object> map1 = new HashMap<>();
        nodes.add("rtnMsg");
        nodes.add("rtnCode");
        map1 = getValueByNode(rtnMsgXML, nodes, "UTF-8");
    }
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public static Map<String, Object> getValueByNode(String xml, List<String> nodes, String charsetName) throws DocumentException, UnsupportedEncodingException {
        Document document = new SAXReader().read(new ByteArrayInputStream(xml.getBytes(charsetName)));
        Map<String, Object> result = new HashMap();
        nodes.forEach(node -> {
            String xpath = "//" + "R" + "//" + "C" + "[@N='"+node+"']";
            Node singleNode = document.selectSingleNode(xpath);
            if(singleNode != null) {
                result.put(node, singleNode.getStringValue());
            }
        });
        return result;
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值