java解析xml报文的方式
作者:wanrong发布时间:2021年08月23日 17:20

  程序员在使用java编程时,经常会遇到要求返回参数需要传xml格式报文的情况,但是有些网上解析sml报文的方法写得都很复杂,下面小编给大家介绍几种简单的java解析xml报文的方式。


  方法一:


  1、第一种方式很简单,但是有缺陷,我先说说怎么弄,待会再来说缺陷。首先在pom.xml中引入需要依赖的jar文件(maven项目直接依赖就行),如果不是maven管理的话自己手动去网上下载一下jar吧,也没什么!

  2、然后就是应用了,下图是比较正常的xml报文格式,先把我的xml报文给你们看一下吧!

  3、import net.sf.json.xml.XMLSerializer;引入后


  通过JSON respJson=new XMLSerializer().read(responseXml);方法


  把webservice那边传过来的xml报文(responseXml)解析成JSON。


  然后JSONObject jsonObject=JSONObject.fromObject(respJson);


  转成json对象我们就能通过相应的节点一步一步去拿到里面的值了,如果是对json比较熟悉的同学的话用这种方式应该很好理解!

  4、但是!!!这种方式如果是碰到比较奇葩一点的xml报文的话就比较尴尬了,比如下图这种,就非得多添加几个节点!然后你用XMLSerializer()去解析的时候就会发现程序并没有那么智能,它分不清你是一个list还是一个单节点,这个时候你就得手动去处理了,没有什么好的方式。


  还有一点得特别注意:就是我们自己手动写了一个xml报文去做测试和你调用别人接口然后解析出来的结果是不一样的,这个也是一个比较奇葩的地方,如果有条件的话最好还是通过请求webservice接口拿到xml报文然后再去解析,别自己去写一个静态的xml报文然后解析。

  方法二:xstream方式


  1、第二种方式稍稍复杂一点但是比较保险,javaBean与XML双向转换(推荐)。还是先引用jar包。

  2、拿到返回的xml报文,先分析一下xml的结构--data标签嵌套head和body;此时我们得建相应的实体类了。

  3、body里面嵌套nbdetail标签,而body里很明显是一个list,此时我们得在body实体类中


   XStreamImplicit(itemFieldName="nbdetail")


  private List nbdetail;


   XStreamImplicit(itemFieldName="nbdetail")这句话是关键,它会让nbdetail认为是body的子标签并且是list形式的;itemFieldName的值就是子标签的名字,对应xml报文节点,然后实现get set方法。

  4、接下来就是把nbdetail标签下的内容表现出来了; XStreamAlias("nbdetail")这句不能少,body下的nbdetail会通过这个找到你对应的实体类,然后关联起来!

  5、ok,xml报文里的节点和我们的实体类都对应上了之后我们开始解析。直接上图贴代码了;


  //responseXml是返回的xml字符串


  String responseXml=contractservice.getWaitDealQueryAPPService(mProcessParamDTO);


  //import com.thoughtworks.xstream.XStream;别new错了哦


  XStream xs=new XStream();


  //xml节点对应实体类


  xs.alias("data",Data.class);


  xs.alias("head",Head.class);


  xs.alias("body",Body.class);


  xs.alias("nbdetail",NBnbdetail.class);


  xs.processAnnotations(new Class[]{Data.class,Head.class,


  Body.class,NBnbdetail.class});


  //通过这种方式把xml转成对象


  Object obj=xs.fromXML(responseXml);


  //强转成Data对象


  Data data=(Data)obj;


  //对象的get方法不就拿到了对应节点的值了吗?so easy


  List nbdetail=data.getBody().getNbdetail();

  6、有的时候如果xml里面有Java的关键字的话,我们就不知道怎么建实体类了,我就碰到过。下面再说一下。先贴出xml报文吧!!

  7、body里面嵌套一个return标签;嘿嘿,return是Java的关键字吧?闲话不多说,直接上图解释一下。


   XStreamAlias("return")


  private CLIsCustomerReturn cliscustomerreturn;


   XStreamAlias("return")写这句话时我们得import com.thoughtworks.xstream.annotations.XStreamAlias;记得写get set方法


  接下来就是建CLIsCustomerReturn实体类了,看图您就明白过来了,我们不能直接写return字段和实体类,所以我们得绕一下,双向引用。

 

  8、然后就是解析xml报文了,如下图;和上面第5步是一样的,同学们看一下就明白了,在此就不多做解释了!

  以上就是java解析xml报文的方式,这些基本的知识对大家在学习java或者工作时具有一定的参考价值,大家可以选择其中一种进行操作练习。


  本篇文章使用以下硬件型号:联想小新Air15;系统版本:win10;软件版本:JAVA编辑器。

特别声明:以上文章内容仅代表作者wanrong本人观点,不代表虎课网观点或立场。如有关于作品内容、版权或其它问题请与虎课网联系。
500+精品图书
20G学习素材
10000+实用笔刷
持续更新设计模板
立即领取

下载虎课APP

随时随地学技能
APP更方便
每天免费学课程
下载虎课网APP
随时随地学海量会员教程
特惠
充值
7折购
今日还在继续学习的你,太棒了!
7
折扣券可用于
年费无限VIP
立 即
使 用
此活动优惠不可与其他活动叠加使用
有效期:000000
消息
登录即可查看消息记录
建议
意见
官方
客服
在线咨询客服热线

您可以与在线客服进行沟通获得帮助

工作日:9:00~22:00节假日:9:00~18:00

联系在线客服

您可以电话联系客服进行沟通获得帮助

工作日:9:30~18:30

400-862-9191
虎课
积分
免费学习89000+个教程!
配套素材、源文件一键下载!
昨日学员已学习了45,189
并提交了222份作业!
登录后立即学习!
loading
微信扫码关注即可登录
您需要同意协议才可以进行登录
登录虎课网,每天免费学课程全站 89000+ 视频会员教程 | 每日可免费学 1
为确保账户信息安全
请先进行真实姓名验证后进行充值付款
立即验证