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"));

    }
}

测试结果:

在这里插入图片描述

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Hello Qt——QMake用户指南[通俗易懂]

    Hello Qt——QMake用户指南[通俗易懂]一、QMake使用QMake提供了一个用于管理应用程序、库、其它组件的构建过程的面向工程系统。QMake扩展了每个工程文件的信息,生成一个执行编译和链接过程的必须命令的MakeFile。1、描述工程工程文件.pro描述了工程信息。工程文件信息会被qmake用于生成包含构建过程中所需的所有命令的MakeFile。工程文件通常包含一系列头文件和源文件,通用配置信息以及音乐程序指定的细节,如应用程序的链接库、搜索路径。工程文件包含一定数量的不同元素,如注释、变量声明、内置函数以及简单的控制结构

    2022年5月19日
    41
  • SSDP协议基础_最核心的协议

    SSDP协议基础_最核心的协议http://net.zdnet.com.cn/network_security_zone/2010/0715/1814422.shtmlSSDP协议,不知道大家是否听说过呢?这个协议的使用多出现在端口当中。下面我们就来了解一下这个协议的具体内容吧。什么是SSDP协议呢?SS

    2022年10月11日
    5
  • 又被鹅厂问懵逼了:TCP 四次挥手收到乱序的 FIN 包会如何处理?

    又被鹅厂问懵逼了:TCP 四次挥手收到乱序的 FIN 包会如何处理?大家好,我是小林。收到个读者的问题,他在面试鹅厂的时候,被搞懵了,因为面试官问了他这么一个网络问题:不得不说,鹅厂真的很喜欢问网络问题,而且爱问异常情况下的网络问题,之前也有篇另外一个读者面试鹅厂的网络问题:「被鹅厂面怕了!」。不过这道鹅厂的网络题可能是提问的读者表述有问题,因为如果FIN报文比数据包先抵达客户端,此时FIN报文其实是一个乱序的报文,此时客户端的TCP连接并不会从FIN_WAIT_2状态转换到TIME_WAIT状态。因此,我们要关注到点是看「在FIN_WAI

    2022年5月8日
    47
  • 从0到1打造直播 App

    从0到1打造直播 App概要分享内容:互联网内容载体变迁历程,文字——图片/声音——视频——VR/AR——…….。从直播1.0秀场时代(YY),2.0游戏直播(斗鱼、虎牙、熊猫)到如今全民直播3.0泛生活娱乐时代(映客、花椒),国外直播app(Meerkat、Periscope),随着VA/AR/MR提出的沉浸式视听体验,直播4.0时代很快就能到来。在这个全民娱乐的时代,直播已经火得不要不要的,

    2022年5月29日
    42
  • vscode设置终端_vscode 关联PDF

    vscode设置终端_vscode 关联PDFhttps://blog.csdn.net/qq_36743482/article/details/103487025

    2025年5月27日
    3
  • 如何解决wamp中apache外部IP访问问题

    如何解决wamp中apache外部IP访问问题

    2021年9月23日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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