Retrofit使用SimpleXmlConverterFactory解析xml之无坑版(无坑有效期:暂定17年底)
假设服务器端的xml文件是这样的
<?xml version="1.0" encoding="UTF-8"?><oschina><pagesize>20</pagesize><blogs><blog><id>479315</id><title><![CDATA[mfs分布式文件系统的配置]]></title><body><![CDATA[mfs分布式文件系统,所需主机: 管理服务器 managing server (master ...]]></body><url><![CDATA[http://my.oschina.net/u/2368504/blog/479315]]></url><pubDate>2015-07-16 14:46:19</pubDate><authoruid>2368504</authoruid><authorname><![CDATA[benberba]]></authorname><commentCount>0</commentCount><documentType>1</documentType></blog><blog><id>479169</id><title><![CDATA[员工激励]]></title><body><![CDATA[员工激励机制 俗话说 “水不激不扬,人不激不奋” 是我国古代典型的激励...]]></body><url><![CDATA[http://my.oschina.net/neochen/blog/479169]]></url><pubDate>2015-07-16 10:27:14</pubDate><authoruid>725072</authoruid><authorname><![CDATA[neo-chen]]></authorname><commentCount>21</commentCount><documentType>1</documentType></blog><blog><id>479095</id><title><![CDATA[使用netty4.x 编写UDP服务器遇到的狗血问题]]></title><body><![CDATA[项目需要,需要编写协议转发服务器,和机顶盒通讯使用udp协议 流程: 接收协...]]></body><url><![CDATA[http://my.oschina.net/u/261246/blog/479095]]></url><pubDate>2015-07-16 02:29:23</pubDate><authoruid>261246</authoruid><authorname><![CDATA[铂金蛋蛋]]></authorname><commentCount>9</commentCount><documentType>1</documentType></blog></blogs>
</oschina>
那么我们自己构建的javabean就应该是这样的
@element指的是元素,就是xml的每一个节点,而@attribute指的是属性,就是每一个节点的括号里面的字段(比如这样<body id = 5>hello world<body>,id就是一个属性),上面的xml没有涉及这个注解
@Root(name = "oschina",strict = false) //注解必须这样写,name值与xml节点一致
public class CommentPage {@Element(name = "pagesize") //注解必须这样写,name值与xml节点一致private int pagesize; //成员变量跟xml节点名字一样,直接复制过来@ElementList(name = "blogs",entry = "info") //如果是集合就这样写注解,name值与xml节点一致,entry指的是泛型类对应的nameprivate ArrayList<MyComment> blogs;public CommentPage(){} // 坑一:要有空参构造public CommentPage(int pagesize, ArrayList<MyComment> blogs) {//有参构造最好也写上this.pagesize = pagesize;this.blogs = blogs;}public void setPagesize(int pagesize) { //set和get方法也写上this.pagesize = pagesize;}public void setBlogs(ArrayList<MyComment> blogs) {this.blogs = blogs;}public int getPagesize() {return pagesize;}public ArrayList<MyComment> getBlogs() {return blogs;}
}
@Root(name = "info",strict = false)//注解必须这样写,name值与xml节点一致
public class MyComment {@Element(name = "id")//注解必须这样写,name值与xml节点一致private Integer id;//成员变量跟xml节点名字一样,直接复制过来@Element(name = "title")private String title;@Element(name = "body")private String body;@Element(name = "url")private String url;@Element(name = "pubDate")private String pubDate;@Element(name = "authoruid")private Integer authoruid;@Element(name = "authorname")private String authorname;@Element(name = "commentCount")private Integer commentCount;@Element(name = "documentType")private Integer documentType;public MyComment(){}//要有空参构造public MyComment(Integer id, String title, String body, String url, String pubDate, Integer authoruid, String authorname, Integer commentCount, Integer documentType) {this.id = id; //有参构造最好也写上this.title = title;this.body = body;this.url = url;this.pubDate = pubDate;this.authoruid = authoruid;this.authorname = authorname;this.commentCount = commentCount;this.documentType = documentType;}public Integer getId() { //set和get方法也写上return id;}public String getTitle() {return title;}public String getBody() {return body;}public String getUrl() {return url;}public String getPubDate() {return pubDate;}public Integer getAuthoruid() {return authoruid;}public String getAuthorname() {return authorname;}public Integer getCommentCount() {return commentCount;}public Integer getDocumentType() {return documentType;}public void setId(Integer id) {this.id = id;}public void setTitle(String title) {this.title = title;}public void setBody(String body) {this.body = body;}public void setUrl(String url) {this.url = url;}public void setPubDate(String pubDate) {this.pubDate = pubDate;}public void setAuthoruid(Integer authoruid) {this.authoruid = authoruid;}public void setAuthorname(String authorname) {this.authorname = authorname;}public void setCommentCount(Integer commentCount) {this.commentCount = commentCount;}public void setDocumentType(Integer documentType) {this.documentType = documentType;}}
java代码如下
private void loadData() {Retrofit retrofit = new Retrofit.Builder().addConverterFactory(SimpleXmlConverterFactory.create()) //添加xml转换器.baseUrl("http://www.oschina.net/").build();NetLine netLine = retrofit.create(NetLine.class);retrofit2.Call<CommentPage> call = netLine.getRecommentList(0,20,"recommend");call.enqueue(new retrofit2.Callback<CommentPage>() {@Overridepublic void onResponse(retrofit2.Call<CommentPage> call, retrofit2.Response<CommentPage> response) {CommentPage commentPage = response.body(); //直接得到对象ArrayList<MyComment> blogs = commentPage.getBlogs();System.out.println(blogs.get(0).getAuthorname());}@Overridepublic void onFailure(retrofit2.Call<CommentPage> call, Throwable throwable) {}});}
NetLine接口
public interface NetLine {@GET("action/api/blog_list")Call<CommentPage> getRecommentList(@Query("pageIndex") int a, @Query("pageSize") int b, @Query("type") String c);
}
坑二:添加依赖,必须这样添加才可以
compile ('com.squareup.retrofit2:converter-simplexml:2.0.1'){exclude group: 'xpp3', module: 'xpp3' exclude group: 'stax', module: 'stax-api' exclude group: 'stax', module: 'stax' }
鉴于全网都搜不到一个讲解converter-simplexml的注解使用的文章,估计是现在使用json的公司太多了吧,期望有大神能讲解一下它的注解的详细使用指南,让我再好好学学
Retrofit使用SimpleXmlConverterFactory解析xml之无坑版(无坑有效期:暂定17年底)相关推荐
- c++ tinyxml2 解析xml小坑
如题,项目中遇到的解析xml小坑: xml是python在windows下生成的,虽然是utf8的,但是回车是16进制显示的0D 0A,与linux下的回车不同(0A),导致使用Parse函数时解析失 ...
- 详解Java解析XML的四种方法
http://developer.51cto.com 2009-03-31 13:12 cnlw1985 javaeye 我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- php xml对象解析_php解析xml 的四种简单方法(附实例)
XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...
- 详解Java解析XML的四种方法(转载)
原文地址:http://developer.51cto.com/art/200903/117512.htm XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成 ...
- 解析XML的4种方式及优缺点比较
dom, sax是解析xml的底层接口 而jdom和dom4j则是基于底层api的更高级封装 dom是通用的,而jdom和dom4j则是面向java语言的 (方法一). DOM解析说明:为 XM ...
- 解析xml数据存入bean映射到数据库的 需求解决过程
解析xml数据存入bean映射到数据库的 需求解决过程 2017年12月19日 15:18:57 守望dfdfdf 阅读数:419 标签: xmlbean 更多 个人分类: 工作 问题 编辑 版权声明 ...
- java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...
网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...
- java 的xml_详解Java解析XML的四种方法
XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM ...
最新文章
- 纯css实现毛玻璃效果
- list 去重_测试面试题集Python列表去重
- 通过MATLAB读取mnist数据库
- Nomad技术手册:共识协议(Consensus Protocol)
- why FOR ALL ENTRIES is not considered at all in one order search
- 信息学奥赛一本通(1087:级数求和)
- 06旋转数组的最小数字
- 春招你必须掌握的Python经典面试题(附赠简历模版)
- YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5的发展(1)
- TwinCAT 3 首次运行报错4115
- 壹基金,李连杰的长尾理论
- 把视频中人的台词去掉且保留背景音乐的方法
- maven项目 The superclass javax.servlet.http.HttpServlet was not found on the Jav
- 如何用cmd安装Python库
- Halcon二维码扫描算法总结
- 科比球衣退役仪式和演讲6分钟全回顾(中文字幕)
- PMP考试报名英文申请中项目经验该怎样填写?
- 如何搭建自己的独立网站
- 扶我起来我还能打:NBA新赛季开打,历史数据看勇士是否无敌?
- 用华秋DFM作为PCB Viewer