复杂的xml转化为java实体
一、样例一:
以根据订单号向支付宝查询支付是否成功为例(成功信息)
失败信息:
<?xml version="1.0" encoding="utf-8"?>
<alipay>
<is_success>F</is_success>
<error>TRADE_NOT_EXIST</error>
</alipay>
成功信息:
<?xml version="1.0" encoding="utf-8"?>
<alipay>
<is_success>T</is_success>
<request>
<param name="_input_charset">utf-8</param>
<param name="service">single_trade_query</param>
<param name="partner">2088121424678319</param>
<param name="out_trade_no">H161021114440198N</param>
</request>
<response>
<trade>
<body>订单:T16102111443568</body>
<buyer_email>1176760525@qq.com</buyer_email>
<buyer_id>2088402231747066</buyer_id>
<discount>0.00</discount>
<flag_trade_locked>0</flag_trade_locked>
<gmt_create>2016-10-21 11:45:06</gmt_create>
<gmt_last_modified_time>2016-10-21 11:45:16</gmt_last_modified_time>
<gmt_payment>2016-10-21 11:45:17</gmt_payment>
<is_total_fee_adjust>F</is_total_fee_adjust>
<operator_role>B</operator_role>
<out_trade_no>H161021114440198N</out_trade_no>
<payment_type>1</payment_type>
<price>0.01</price>
<quantity>1</quantity>
<seller_email>pay@gstarcad.com</seller_email>
<seller_id>2088121424678319</seller_id>
<subject>的生活费...</subject>
<time_out>2017-01-20 11:45:17</time_out>
<time_out_type>finishFPAction</time_out_type>
<to_buyer_fee>0.00</to_buyer_fee>
<to_seller_fee>0.01</to_seller_fee>
<total_fee>0.01</total_fee>
<trade_no>2016102121001004060245497067</trade_no>
<trade_status>TRADE_SUCCESS</trade_status>
<use_coupon>F</use_coupon>
</trade>
</response>
<sign>25217c932f49868371a301e3151201a2</sign>
<sign_type>MD5</sign_type>
</alipay>
首先解析is_success字段的值,看看结果是T(成功)还是F(失败),具体就不详细作解释,这里只分析为T时的数据,一定要判断,否则若为F再解析因XML格式不一会报错
Map<Object, Object> map = new HashMap<Object, Object>();
map = XMLUtil.doXMLParse(result);
String is_success = map.get("is_success").toString();
1、工具类XStreamHandle中定义两个方法:
/**
* 实体转xml字符串
* @param obj
* @return
*/
public static String toXml(Object obj) {
XStream xstream = new XStream(new DomDriver("utf8"));
xstream.processAnnotations(obj.getClass()); // 识别obj类中的注解
return xstream.toXML(obj);
}
/**
* 字符串转实体
* @param xmlStr
* @param cls
* @return
*/
public static <T> T toBean(String xmlStr, Class<T> cls) {
XStream xstream = new XStream(new DomDriver());
xstream.processAnnotations(cls);
@SuppressWarnings("unchecked")
T t = (T) xstream.fromXML(xmlStr);
return t;
}
2、根据节点的层级关系定义实体(此为重点)
由顶级节点alipay建的实体Alipay 类(Alipay -response-trade) request暂时不需要解析可用String接收

省略get,set方法
Alipay 的下级节点response建造类Response

省略get,set方法
Response的下级节点trade建造类

xml中所有的标签都要解析,否则会报错
3、调用
String xml="..."; //xml字符串
Alipay alipay = XStreamHandle.toBean(xml, Alipay.class);
Trade trade = alipay.getResponse().getTrade();
二、样例二
books中有好多book数,有价格,书名,作者
xml样式:
<?xml version="1.0" encoding="utf-8"?>
<books>
<book price="108">
<name>Java编程思想</name>
<author>Bruce Eckel</author>
</book>
<book price="52">
<name>Effective Java</name>
<author>Joshua Bloch</author>
</book>
<book price="118">
<name>Java 7入门经典</name>
<author>Ivor Horton</author>
</book>
</books>
1、工具类还用样例一中的工具类,这里不做重复了
2、根据节点的层级关系定义实体
根据顶级元素books创建实体

根据子级创建book类

3、调用
String xmlString = "......"; //xml内容
Books books = XStreamHandle.toBean(xmlString, Books.class);
List<Book> booklist = books.getList();
System.out.println(booklist.size());

复杂的xml转化为java实体的更多相关文章
- json转化为java实体
import net.sf.json.JSONObject; Map<String, Object> classMap = new HashMap<String, Object> ...
- 利用JAXB实现java实体类和xml互相转换
1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同 ...
- xml文档的解析并通过工具类实现java实体类的映射:XML工具-XmlUtil
若有疑问,可以联系我本人微信:Y1141100952 声明:本文章为原稿,转载必须说明 本文章地址,否则一旦发现,必追究法律责任 1:本文章显示通过 XML工具-XmlUtil工具实现解析soap报文 ...
- xml转json和实体类的两种方式
本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...
- 根据XML文件 生成 java类
最近一直在做关于webservice 的项目,这种项目最麻烦的就是根据对方的要求产生XML,文档里面虽然有XML结构,但是要转化为java里面的实体实在费劲, 有个自动化的工具就好了,半自动化也好,省 ...
- WebService(2)-XML系列之Java和Xml之间相互转换
源代码下载:链接:http://pan.baidu.com/s/1ntL1a7R password: rwp1 本文主要讲述:使用jaxb完毕对象和xml之间的转换 TestJava2xml.java ...
- XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax
本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...
- org.xml.sax.SAXParseException;在实体引用中, 实体名称必须紧跟在 '&' 后面
错误信息如下:org.xml.sax.SAXParseException;在实体引用中, 实体名称必须紧跟在 ‘’&’’ 后面 出现这个错误的原因是在xml中使用&,实际上xml中不支 ...
- JAXB轻松转换xml对象和java对象
实体类如下: package com.cn.entity; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; ...
随机推荐
- 《Entity Framework 6 Recipes》中文翻译系列 (44) ------ 第八章 POCO之POCO中使用值对象和对象变更通知
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 8-4 POCO中使用值对象(Complex Type--也叫复合类型)属性 问题 ...
- Wakatime 测试工作时间
Wakatime – 现在几点了,你在做什么呢 前面提到了一个用来QS自己的工具Clarify.这次介绍一个专门给程序员用的工具.大家都知道一万小时定律,但我究竟写java写了多久了呢?WakaTim ...
- [erl] erlang 进程注册和注销
想要注册一个进程,必须先要创建一个进程. 如何创建一个进程,可以使用spawn.spawn_link,它们虽然都能创建进程,但是也有微妙的区别: 1)当前进程中创建一个并行进程,当被生成的进程崩溃时, ...
- 一个美术需求引发的Custom Inspector
需求 Editor模式下,在运行或者非运行状态下,能够按照指定的变化率来自动改变material中属性数值. 需求分析 如何在Editor模式下获得一个游戏对象及其组件,尤其是在非运行状态下?我们知道 ...
- SSISDB8:使用SSISDB记录的消息Troubleshoot packages
在执行Package时,SSISDB都会创建唯一的OperationID 和 ExecutionID,标识对package执行的操作和执行实例(Execution Instance),并记录opera ...
- 利用扩展事件进行调优和Troubleshooting PPT分享
本篇主题是我在2015年中国数据库大会(DTCC)上的分享,扩展事件从2008版本出来到现在已经有6-7年,国内却很少有相关资料和使用,现在分享一下PPT,希望对大家有所帮助. 可 ...
- iTween 动画类型
iTween 动画类型 http://robertpenner.com/easing/easing_demo.html 使用范例 http://www.xuanyusong.com/archives/ ...
- lua中的数据类型
lobject.h: lobject.h: 其中使用GCObject表示的数据类型是需要lua 的gc记录的. lstate.h: lobject.h:
- 学用MVC4做网站六:后台管理(续)
关于后台的说明: 后台将会用easyui + ajax模式. 这里涉及两个问题,一个是使用easyui如何在前台验证模型的问题,另一个是ajax提交后返回数据. 一.Easyui验证 前台验证采用ea ...
- PJAX实现
一.浏览器历史API 浏览器历史就像一堆卡片,如下所示: