Java解析XML字符串「建议收藏」

Java解析XML字符串「建议收藏」在网上找了很多Java语言解析XML字符串的资料,很多内容写得很繁复,没有普适性,遂自己动手写了一个用Java解析XML的工具类。话不多说,直接看下面代码:XML解析工具类:importorg.dom4j.Document;importorg.dom4j.DocumentException;importorg.dom4j.Node;importorg.dom4j.io.SAXReader;importjava.io.ByteArrayInputStream;importjava.

大家好,又见面了,我是你们的朋友全栈君。

在网上找了很多Java语言解析XML字符串的资料,很多内容写得很繁复,没有普适性,遂自己动手写了一个用Java解析XML的工具类。话不多说,直接看下面代码:

XML解析工具类:

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;

/** * @author : chenfan * @className : XMLParse * @date : Created in 2021/3/29 13:59 * @description : XML解析工具 */

public class XMLParse { 
   

    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 = "//" + node;
            Node singleNode = document.selectSingleNode(xpath);
            if(singleNode != null) { 
   
                result.put(node, singleNode.getStringValue());
            }
        });
        return result;
    }
}

测试案例:

import com.chenfan.XMLParse;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/** * @author : chenfan * @className : TestXmlPrase * @date : Created in 2021/3/29 14:02 * @description : 测试类 */
public class TestXmlPrase { 
   
    public static void main(String[] args) { 
   
        String xml = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n" +
                     "<HouseVo xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" +
                     " <returnCode>100</returnCode>\n" +
                     " <reason>获取成功!</reason>\n" +
                     " <orderNo>ZK12345678</orderNo>\n" +
                     " <totalAmount>2000000</totalAmount>\n" +
                     " <payedAmount>0</payedAmount>\n" +
                     " <oweAmount>0</oweAmount>\n" +
                     " <name>张三</name>\n" +
                     " <addr>测试用例</addr>\n" +
                     "</HouseVo>";

        Map<String, Object> map = new HashMap<>();
        try { 
   
            List<String> nodes = new ArrayList<>();
            nodes.add("returnCode");
            nodes.add("reason");
            nodes.add("orderNo");
            nodes.add("totalAmount");
            nodes.add("payedAmount");
            nodes.add("oweAmount");
            nodes.add("name");
            nodes.add("addr");

            /* * 注意此处处理xml报文的坑: * xml报文encoding是utf-16,所以此处XML解析的charsetName须为utf-16 * charsetName若跟xml报文encoding不一致,会报错:“前言中不允许有内容” */
            map = XMLParse.getValueByNode(xml, nodes, "utf-16");
        } catch (Exception e) { 
   
            e.printStackTrace();
            System.out.println("xml解析失败");
        }

        System.out.println("returnCode:" + map.get("returnCode"));
        System.out.println("reason:" + map.get("reason"));
        System.out.println("orderNo:" + map.get("orderNo"));
        System.out.println("totalAmount:" + map.get("totalAmount"));
        System.out.println("payedAmount:" + map.get("payedAmount"));
        System.out.println("oweAmount:" + map.get("oweAmount"));
        System.out.println("name:" + map.get("name"));
        System.out.println("addr:" + map.get("addr"));

    }
}

测试结果:

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135977.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 我手写了个SLAM算法!「建议收藏」

    我手写了个SLAM算法!「建议收藏」我手写了个SLAM算法!点击蓝色按钮,设置星标,第一时间获得文章推送哦1、前言前一段时间看过我文章的都知道,我打算写一个SLAM源码阅读的文章,然后,我就去读了Gmapping的源码,感受良多,不足的地方就是源码太乱了,阅读起来真的不香。于是就有了这篇文章,在我仔细阅读之后,我在源码的结构基础之上,进行大刀阔斧的删减和更改之后得到一个易于阅读的建图算法功能包,极大的降低了代码量,极大的提升了阅读体验。在这里将该算法功能包分享给大家,希望需要的朋友,善待它。之前文章链接:ps:为什么是gmappin

  • Spring Cloud面试题(2020最新版)[通俗易懂]

    Spring Cloud面试题(2020最新版)[通俗易懂]文章目录为什么需要学习SpringCloud什么是SpringCloud设计目标与优缺点设计目标优缺点SpringCloud发展前景整体架构主要项目SpringCloudConfigSpringCloudNetflixSpringCloudBusSpringCloudConsulSpringCloudSecuritySpringCloudSleuthSpringCl…

  • js跨域请求的三种方法_jQuery

    js跨域请求的三种方法_jQueryJavaScriptjQuery:Ajax、跨域。

    2022年10月30日
  • pycharm如何调试python程序_Pycharm断点调试Python程序的步骤方法

    pycharm如何调试python程序_Pycharm断点调试Python程序的步骤方法利用Pycharm断点调试Python程序的方法1.代码准备没有语法错误的Python程序:#!/usr/bin/pythonimportnumpyasnpclassNetwork:def__init__(self,sizes):self.num_layers=len(sizes)self.sizes=sizesself.biases=[np.random.randn(y,1)for…

    2022年10月30日
  • 进程池及回掉函数[通俗易懂]

    进程池在说进程池之前先来说一个概念:数据共享数据共享1.进程间的通信应该尽量避免共享数据的方式2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的。虽然进程间数据独立

  • 解决P2P传输瓶颈

    解决P2P传输瓶颈随着嵌入式技术这几年的迅速发展,在个人电脑平台上正显示出强大市场需求的流媒体技术,目前逐渐有向嵌入式平台转移的趋势。个人便携化、家电化的媒体消费需求,为这次平台的转移提供了市场契机。IPTV正是在这场消费革命中处在风口浪尖的焦点。业内大多认为IPTV蕴含了巨大的商业利益,但至今仍鲜有涉足者,其中原因之一是网络速度问题。本文介绍了对等网络技术,即点对点(P2P)技术,将其应用到IPTV网络传输中,可

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号