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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android调用相册并显示图片_Android获取相册列表

    android调用相册并显示图片_Android获取相册列表从之前的项目摘出来这段代码,去掉了裁剪功能packagecom.example.one;importandroid.content.Intent;importandroid.database.Cursor;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.g…

    2022年9月15日
    0
  • FormatDateTime说解[通俗易懂]

    描述返回一个日期或时间格式的表达式。语法FormatDateTime(Date[,NamedFormat])FormatDateTime函数语法有如下几部分:部分描述Date必需的。要被格式化的日期表达式。NamedFormat可选的。数字值,表示日期/时间所使用的格式。如果忽略该值,则使用vbGeneralDate。设置值N…

    2022年4月10日
    55
  • 基于 vue 实现的电商后台管理系统

    基于 vue 实现的电商后台管理系统源码地址:https://github.com/Hero601/vue_shop后端接口:https://goal.lanzous.com/b01c5hhsb密码:5ees免费的小星星点一个吧~

    2022年5月6日
    74
  • webgame开发中配置存储的介绍「建议收藏」

    webgame开发中配置存储的介绍「建议收藏」webgame世界的基础数值都是事先配置好的,在运行的时候可以随时读取,是属于非常重要和必不可少的部分,而且数据量也不少。这样的数据在开发中的存储也就变得重要了,需要保证效率、性能、安全等,一般的做法有使用xml文本文件保存、静态数组保存和数据库直接保存。 xml文本文件保存优点: 共享性强,几乎每种语言都可以读取和解析xml文件,方便多语言混合开发。 结构清晰,xml的结构很

    2022年5月2日
    42
  • webstorm激活码最新2021 4月【在线注册码/序列号/破解码】

    webstorm激活码最新2021 4月【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    114
  • adas毫米波雷达_雷达探测障碍物是超声波吗

    adas毫米波雷达_雷达探测障碍物是超声波吗ADAS超声波雷达在倒车入库,慢慢挪动车子的过程中,在驾驶室内能听到”滴滴滴“的声音,这些声音就是根据超声波雷达的检测距离给司机的反馈信息。倒车雷达系统,英文全称为REVERSING/PARKINGAIDSUBSYSTEM,BACKSENSOR或PACKINGSENSOR,英文简称RPA。目前被各种轿车特别是高级轿车作为汽车电装品的标准配置或售后的汽车电装品主是选配品,例如:德国…

    2022年9月12日
    0

发表回复

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

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