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


相关推荐

  • 命令行连接mongodb_yum安装mongodb

    命令行连接mongodb_yum安装mongodb情况:1.使用xmanage能远程链接centos

    2022年8月21日
  • mysql 联合主键_Mysql 创建联合主键[通俗易懂]

    mysql 联合主键_Mysql 创建联合主键[通俗易懂]Mysql创建联合主键2008年01月11日星期五下午5:21使用primarykey(fieldlist)比如:createtablemytable(aaint,bbchar(8),ccdate,primarykey(aa,bb));aa,bb为联合主键不知道是不是因为mysql(6.0)的版本问题,还是各版本都是这种情况,mysql中创建联合主键,联合主键列名之外…

    2022年6月16日
  • Mac 键盘快捷键

    Mac 键盘快捷键Mac键盘快捷键您可以按下组合键来实现通常需要鼠标、触控板或其他输入设备才能完成的操作。要使用键盘快捷键,请按住一个或多个修饰键,同时按快捷键的最后一个键。例如,要使用快捷键Command-C(拷贝),请按住Command键并按C键,然后同时松开这两个键。Mac菜单和键盘通常对某些按键使用符号,其中包括以下修饰键:Command⌘Shift⇧Option⌥Con…

    2022年5月16日
  • mysql datetime格式化日期(mysql start with)

    *版权声明:本文为博主原创文章,转载请注明出处。*我们在日常数据统计时常会遇到“2018-12-1216:21:12”or“2018-12-1216:21:12.609000”这样的时间格式,假如要统计某一天产生了多少条数据量,SQL该怎么写呢?本文希望能够对大家学习和使用有所帮助。contentcreateTime设备2018-12-1015:20:20…

    2022年4月13日
  • 傅里叶变换 意义_傅里叶变换表达式

    傅里叶变换 意义_傅里叶变换表达式看到论坛有一个朋友提问为什么傅里叶变换可以将时域变为频域?这个问题真是问到了灵魂深处。在这我只能简单讲讲我的理解,要深刻理解翻信号处理教科书是最好的方法。1.如何描述信号我们常常用数学模型去抽象物理事件。信号也可以用数学模型来表示。有了信号的数学模型,我们就可以利用数学计算对信号模型做各种各样的改变。如果加以计算机,模电,数电的相关知识,我们就可以将我们对信号模型的改变转换为对物理信号的…

    2022年10月20日
  • 初学者如何在博客园发布博客[通俗易懂]

    初学者如何在博客园发布博客[通俗易懂]我也是第一次使用博客园,碰到问题后,也是各种尝试,希望同学们也能多尝试,找到适合自己需要的。下面是我在发博客时尝试过的3种方法,特别是对表格的处理。1.如果大家使用markdown编辑器,请参考娄

    2022年7月2日

发表回复

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

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