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)
blank

相关推荐

  • 20佳应用大图片背景的优秀站点作品

    20佳应用大图片背景的优秀站点作品

  • 调用python-can库使用周立功CAN接口卡发送数据「建议收藏」

    调用python-can库使用周立功CAN接口卡发送数据「建议收藏」查阅python-can文档,知晓其支持部分周立功CAN接口卡,故写例程验证数据的发送。另外,使用的python版本为3.4,在安装python-can时提示找不到windows-curses对应版本的安装包,故在python-can的setup.py中,取消了windows-curses的安装依赖。代码如下(ControlCAN.dll需放置在相同路径下):from__future__importprint_functionimportplatformimportcandefsen

  • ios的邮箱怎么用_ios邮箱怎么添加多个账号

    ios的邮箱怎么用_ios邮箱怎么添加多个账号//该方法在不退出应用程序的前提下调用短信和邮箱,以下内容请在真机测试//导入框架MessageUI.framework#import”ViewController.h”//首先导入头文件#import#import//代理@interfaceViewController()MFMailComposeVi

    2022年10月13日
  • 【小程序】手把手带你完成微信小程序开发实践

    【小程序】手把手带你完成微信小程序开发实践帐号相关流程注册范围企业政府媒体其他组织换句话讲就是不让个人开发者注册。:)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账户信息绑定管理员微信企业认证公司对公账户对微信进行打款账户自动验证后,自动认证通过,并将认证资金退回公司对公账户,费用在1元内随机小程序发布流程开发实践这次的demo项目为农历和公历的转换器,重在体验

  • linux配置ip端口号

    linux配置ip端口号1./etc/httpd/conf.d/test.conf8000> ServerNametest.com//也可以是ip地址 DocumentRoot/var/www/test DirectoryIndexindex.htmlindex.php AddDefaultCharsetutf-8 DefaultLanguageutf-8 LanguagePriority

  • 全角字符和半角字符的区别和操作方法_手机有半角全角的区别吗

    全角字符和半角字符的区别和操作方法_手机有半角全角的区别吗全角字符的由来#全角符号是双字节中文编码的历史遗留问题。当年在纯文本的界面中,为了让西文和中日韩的方块字对齐,就让西文字母、数字和标点也占用一个汉字的视觉空间,并使用2个字节存储。后来,其中的一些全角字符因为比较有用,就得到了广泛应用(比如全角的逗号「,」、问号「?」、感叹号「!」、空格「 」等),专用于中日韩文本,成为了标准的中日韩标点字符。而其它的许多全角符号失去了价值,因为我们现在很少需要让纯文本的中文和西文字字对齐了,就很少再用了。另外需要说明的是:现在全球文本编码的事实标准是UTF-

    2022年10月22日

发表回复

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

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