java后台解析xml格式字符串
背景:
在调用京东万象的短信接口的时候,它返回的是json格式的字符串,使用的是京东万象的106短信
接口(https://wx.jdcloud.com/market/datas/5/10306)
解析xml的两种方式进行比较:
1.DOM解析(DOM解析它是一次性将要解析的文件加载到内存,然后再进行解析)
2.SAX解析(SAX解析它是边读边解析)
总结:DOM解析不仅能读xml数据,还可以对其内容的节点进行增删改,而SAX解析只能读文件使用,所以使用DOM解析,DOM解析使用的是dom4j+xpath方式
XPath中如何使用路径表达式:
xml案例:
// 其中bookstore是根节点,book节点是bookstore节点的子节点,title节点和price节点是bookstore节点的后代节点
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore><book><title lang="eng">Harry Potter</title><price>29.98</price></book><book><title lang="eng">Learning XML</title><price>39.95</price></book>
</bookstore>
路径表达式如下:
表达式 描述
节点名称 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
在上面的xml文档案例上使用路径表达式:
路径表达式 结果
bookstore 选取bookstore元素的所有子节点
/bookstore 选取根元素bookstore
bookstore/book 选取bookstore的子元素中的所有book元素
//book 选取所有book子元素,而不管他们在文档中的位置
bookstore//book 选取bookstore元素的后代的所有book元素,而不管他们位于bookstore之下的什么位置
//@lang 选取名为lang的所有属性
/bookstore/book[1] 选取属于bookstore子元素的第一个book元素
/bookstore/book[last()] 选取属于bookstore子元素中的最后一个book元素
/bookstore/book[last()-1] 选取属于bookstore子元素中的倒数第二个book元素
/bookstore/book[position()<3] 选取属于bookstore子元素中的前二个book元素
//title[@lang] 选取所有属性名称为lang的元素
//title[@lang='eng'] 选取所有属性名称为lang,并且属性值为eng的元素
/bookstore/book[price>35.00] 选取bookstore的子元素中的所有book元素,并且其中price元素的值必须大于35.00
/bookstore/book[price>35.00]/title 选取bookstore的子元素中的所有book元素中的所有title元素,并且其中price元素的值必须大于35.00
如何使用DOM解析:
1、引入依赖
<dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.0</version>
</dependency>
上面是dom4j的依赖,如果使用Maven工具,那就不需要引入xpath的依赖了,因为dom4j需要xpath依赖,所以Maven工具会帮我们引入;如果没有使用Maven工具,那还需要引入一个依赖叫:jaxen.jar,该jar包的作用是支持xpath语法的jar包
2、编写后端代码
// 这是json字符串里面包含xml字符串,可以从“**********解析xml格式的字符串开始***********”该注释处开始看解析xml字符串的方法
String jsonString = "{\n" +" \"code\": \"10000\",\n" +" \"charge\": false,\n" +" \"remain\": 0,\n" +" \"msg\": \"查询成功\",\n" +" \"result\": \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\" ?><returnsms>\\n <returnstatus>Success</returnstatus>\\n <message>ok</message>\\n <remainpoint>-1333773</remainpoint>\\n <taskID>112459829</taskID>\\n <successCounts>1</successCounts></returnsms>\"\n" +"}";
// 将json格式的字符串转换为json对象
JSONObject jsonObject = JSONObject.parseObject(jsonString);// 获取通信标识
String code = jsonObject.getString("code");//判断通信是否成功
if (!StringUtils.equals("10000", code)) {return Result.error("短信平台通信异常");
}// 获取业务处理结果result,result中存储的就是xml格式的字符串
String resultXml = jsonObject.getString("result");// **********解析xml格式的字符串开始***********
// 将xml格式的字符串转换成Document对象
Document document = DocumentHelper.parseText(resultXml);// 获取returnstatus节点对象
Node returnstatusNode = document.selectSingleNode("//returnstatus");// 通过returnstatus节点对象获取该节点对象的内容
String text = returnstatusNode.getText();// 判断短信是否发送成功
if (!StringUtils.equals(text, "Success")) {return Result.error("短信平台发送失败");
}// 处理业务代码
3、java后端解析json字符串(地址:https://blog.csdn.net/qq_42449963/article/details/105394602)
java后台解析xml格式字符串相关推荐
- Java 中解析 xml 格式字符串的数据
解析 xml 格式中的字符串数据 相信有很多小伙伴经历过接口返回的数据是在一段 xml 字符串格式的数据里,那么我们可用什么最快最便捷的方法取到里面的数据勒? 下面这里是一个xml 格式的是实例 这里 ...
- 解析xml格式字符串
解析xml格式字符串 由于写接口时,总有人会传一些xml格式的字符串,节点少时可以一一获取,但是如果有大量的子节点时,可以使用反射机制实现实体类接收xml格式字符串数据,只需要保证节点名称和实体类字段 ...
- dom4j解析xml格式字符串获取标签属性和内容
/*** 解析xml字符串,获取各项属性内容* readXML方法描述:* * @author : gc* @createTime : 2019-4-26 下午4:37:50*/private sta ...
- 安卓解析xml格式字符串
最近实验室的安卓app需要实现发内部邮件的功能. 说白了就是简单的数据库的增删处理. 但是中间的一部分有意思的就是获取收件人的列表的处理. 用户在登录APP的时候,如果验证成功,服务器则把数据的联系人 ...
- java jdom格式_Java全面解析XML格式串(JDOM解析)
搜索热词 Java全面解析XML格式串(JDOM解析) import java.io.IOException; import java.io.StringReader; import java.uti ...
- python xml字符串_python -解析字符串,并返回xml格式字符串 急该如何解决
python --解析字符串,并返回xml格式字符串 急急急. str = """Registrations: ============================= ...
- C# 将XML格式字符串,写入数据集的表中 XML解析
将XML格式字符串,写入数据集的表1中 命名空间:using System.Xml; string strRead;//strRead为以下xml值 XmlDocument x ...
- Android解析xml的方法,Android中解析XML格式数据的方法
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
- Android——网络交互,如何调用接口并且json解析json格式和pull解析xml格式
本菜鸟因为之前一直使用的是公司前辈封装好的类(网络接口调用超级方便有木有)完全没有想过有一天我会自己写,然后今天接触的时候一脸懵逼,然后今天花了一天时间终于研究好了:哈哈哈哈哈 二话不说先上代码: p ...
最新文章
- python ftp模块_python中的FTP文件模块
- linux python自动补全_Linux下在python命令行中自动补全代码(py2、3,centos、ubuntu)...
- mysql执行计划_mysql的sql执行计划详解
- CSS清除行内元素之间的HTML空白
- 2019最后一个月Python继续霸榜,想上车?看这份书单
- JEECG第16期架构培训班15号开班,每期只有10个名额!想报名的同学速度啦!
- 经典神经网络 | 从Inception v1到Inception v4全解析
- 《天天数学》连载38:二月七日
- 程序员的脑回路太清奇,就一件衣服跟我叨叨半天
- html5支付认证,html5实现微信支付宝接口
- python利用什么写模板_利用python自动生成verilog模块例化模板
- CPU瓶颈(五)--过度编译与不必要重复编译的解决方案
- bjui刷新当前页签
- linux vi命令怎么使用方法,Linux下 vi 命令用法
- Uniswap进化之路
- 经典:智能物联网大数据系统案例
- 固态硬盘是什么接口_M.2 SSD固态硬盘的规格、接口、总线详解
- java实现随机游走算法_java – 简单的2D随机游走
- 百度直播消息系统的实践和演进
- core+Fleck+redis