假设服务器端的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年底)相关推荐

  1. c++ tinyxml2 解析xml小坑

    如题,项目中遇到的解析xml小坑: xml是python在windows下生成的,虽然是utf8的,但是回车是16进制显示的0D 0A,与linux下的回车不同(0A),导致使用Parse函数时解析失 ...

  2. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

  3. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  4. php xml对象解析_php解析xml 的四种简单方法(附实例)

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...

  5. 详解Java解析XML的四种方法(转载)

    原文地址:http://developer.51cto.com/art/200903/117512.htm XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成 ...

  6. 解析XML的4种方式及优缺点比较

    dom, sax是解析xml的底层接口 而jdom和dom4j则是基于底层api的更高级封装    dom是通用的,而jdom和dom4j则是面向java语言的 (方法一). DOM解析说明:为 XM ...

  7. 解析xml数据存入bean映射到数据库的 需求解决过程

    解析xml数据存入bean映射到数据库的 需求解决过程 2017年12月19日 15:18:57 守望dfdfdf 阅读数:419 标签: xmlbean 更多 个人分类: 工作 问题 编辑 版权声明 ...

  8. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  9. java 的xml_详解Java解析XML的四种方法

    XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM ...

最新文章

  1. 纯css实现毛玻璃效果
  2. list 去重_测试面试题集Python列表去重
  3. 通过MATLAB读取mnist数据库
  4. Nomad技术手册:共识协议(Consensus Protocol)
  5. why FOR ALL ENTRIES is not considered at all in one order search
  6. 信息学奥赛一本通(1087:级数求和)
  7. 06旋转数组的最小数字
  8. 春招你必须掌握的Python经典面试题(附赠简历模版)
  9. YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5的发展(1)
  10. TwinCAT 3 首次运行报错4115
  11. 壹基金,李连杰的长尾理论
  12. 把视频中人的台词去掉且保留背景音乐的方法
  13. maven项目 The superclass javax.servlet.http.HttpServlet was not found on the Jav
  14. 如何用cmd安装Python库
  15. Halcon二维码扫描算法总结
  16. 科比球衣退役仪式和演讲6分钟全回顾(中文字幕)
  17. PMP考试报名英文申请中项目经验该怎样填写?
  18. 如何搭建自己的独立网站
  19. 扶我起来我还能打:NBA新赛季开打,历史数据看勇士是否无敌?
  20. 用华秋DFM作为PCB Viewer

热门文章

  1. 基于WEB纯JAVA应用的框架太棒了-WUI
  2. React 的 PropTypes
  3. 昆仑通态MCGS与西门子V20变频器通讯程序 西门子变频器通讯
  4. 银行网申计算机水平怎么写,银行网申简历模板
  5. python实现数据结构(1)
  6. 《Adobe After Effects CS6中文版经典教程》——2.4 处理导入的Illustrator图层
  7. 三星s轻奢android+p,三星S轻奢版
  8. VBA 向Word插入图片
  9. 美剧字幕组高手写的学英语心得
  10. JavaScript生成可解密的随机密文字符串