Simple XML解析XML

我就是我 2022-06-10 12:55 372阅读 0赞

Simple XML解析XML

源数据如下:

  1. <rss version="2.0">
  2. <channel>
  3. <item>
  4. <newsid>321993</newsid>
  5. <title><![CDATA[德国骨科之力:和泉纱雾手办开订,买手办送角色CV写真]]></title>
  6. <v>000</v>
  7. <url><![CDATA[/html/it/321993.htm]]></url>
  8. <postdate>2017-8-19 12:40:45</postdate>
  9. <image>http://img.ithome.com/newsuploadfiles/thumbnail/2017/8/321993.jpg</image>
  10. <description><![CDATA[近日,A-1改编的四月番《情色漫画老师》女主角和泉纱雾最新手办开订,其中,豪华版还将附赠和泉纱雾声优藤田茜的写真集,以及原作者伏见司签名的明信片和电]]></description>
  11. <hitcount>805</hitcount>
  12. <commentcount>28</commentcount>
  13. <forbidcomment>false</forbidcomment>
  14. <cid>32</cid>
  15. </item>
  16. <item>
  17. <newsid>321992</newsid>
  18. <title><![CDATA[三星“弃疗”:Note 8旗舰机现身官网,外观一览无余]]></title>
  19. <v>000</v>
  20. <url><![CDATA[/html/android/321992.htm]]></url>
  21. <postdate>2017-8-19 12:38:42</postdate>
  22. <image>http://img.ithome.com/newsuploadfiles/thumbnail/2017/8/321992.jpg</image>
  23. <description><![CDATA[从外观到配置以及价格,三星即将在8月23日正式发布的下半年旗舰Note 8基本上已经没有秘密可言,但意外的是三星在发布会之前自己也做了一把爆料者]]></description>
  24. <hitcount>3820</hitcount>
  25. <commentcount>84</commentcount>
  26. <forbidcomment>false</forbidcomment>
  27. <cid>74</cid>
  28. </item>
  29. <item>
  30. <newsid>321991</newsid>
  31. <title><![CDATA[高通高层:一定能赢下和苹果的专利诉讼]]></title>
  32. <v>000</v>
  33. <url><![CDATA[/html/it/321991.htm]]></url>
  34. <postdate>2017-8-19 12:35:02</postdate>
  35. <image>http://img.ithome.com/newsuploadfiles/thumbnail/2017/8/321991.jpg</image>
  36. <description><![CDATA[芯片巨头高通和苹果的专利侵权诉讼已经持续了好几个月,目前看起来也远未到结束的时候。不过,近日该公司执行副总裁兼总法律顾问Donald J. Rosenberg强调,高通一定会赢]]></description>
  37. <hitcount>402</hitcount>
  38. <commentcount>20</commentcount>
  39. <forbidcomment>false</forbidcomment>
  40. <cid>150</cid>
  41. </item>
  42. <item>
  43. <newsid>321990</newsid>
  44. <title><![CDATA[vivo X20通过3C认证:支持18W快充]]></title>
  45. <v>000</v>
  46. <url><![CDATA[/html/android/321990.htm]]></url>
  47. <postdate>2017-8-19 12:13:23</postdate>
  48. <image>http://img.ithome.com/newsuploadfiles/thumbnail/2017/8/321990.jpg</image>
  49. <description><![CDATA[vivo X9s、X9s Plus之后,vivo新旗舰已经在路上了。近日,两款型号为X20和X20A的vivo新机已通过3C认证,从相关信息来看,这两款机型支持最大18W快充]]></description>
  50. <hitcount>2814</hitcount>
  51. <commentcount>50</commentcount>
  52. <forbidcomment>false</forbidcomment>
  53. <cid>74</cid>
  54. </item>
  55. <item>
  56. <newsid>321973</newsid>
  57. <title><![CDATA[量变的8代Core:更多Intel Coffee Lake处理器规格曝光]]></title>
  58. <v>000</v>
  59. <url><![CDATA[/html/digi/321973.htm]]></url>
  60. <postdate>2017-8-19 10:49:35</postdate>
  61. <image>http://img.ithome.com/newsuploadfiles/thumbnail/2017/8/321973.jpg</image>
  62. <description><![CDATA[在昨天我们报道了Coffee Lake的性能提升幅度PPT,但由于照片太模糊,部分参数无法看清,本着对读者负责任的态度,干脆只给出型号和单/多线程性能提升的资料]]></description>
  63. <hitcount>6030</hitcount>
  64. <commentcount>125</commentcount>
  65. <forbidcomment>false</forbidcomment>
  66. <cid>100</cid>
  67. </item>
  68. </channel>
  69. </rss>

开始解析

可以看到源数据分为3层,我分别以ScienceRSS,ScienceChannel,ScienceNews来名称

  • 第一层是一个对象
  • 第二层是一个List
  • 第三层是一个对象

第一层

  1. @Root(name = "rss", strict = false)
  2. public class ScienceRSS {
  3. //里面有一个version,如果不加strict = false就会报错
  4. @Element(name = "channel")
  5. public ScienceChannel scienceChannel;
  6. }

第二层

  1. @Root(name = "channel") //根元素
  2. public class ScienceChannel {
  3. @ElementList(inline = true, required = false) //里面是数组
  4. public List<ScienceNews> mScienceNewsList;
  5. public List<ScienceNews> getmScienceNewsList() {
  6. return mScienceNewsList;
  7. }
  8. public void setmScienceNewsList(List<ScienceNews> mScienceNewsList) {
  9. this.mScienceNewsList = mScienceNewsList;
  10. }
  11. }

第三层

  1. @Root(name = "item", strict = false)
  2. public class ScienceNews {
  3. /**
  4. * 新闻id
  5. */
  6. @Element(name = "newsid")
  7. public String newsId;
  8. /**
  9. * 新闻标题
  10. */
  11. @Element(name = "title")
  12. public String title;
  13. /**
  14. * 新闻的url(不完整)
  15. */
  16. @Element(name = "url")
  17. public String url;
  18. /**
  19. * 更新时间
  20. */
  21. @Element(name = "postdate")
  22. public String postdate;
  23. /**
  24. * 图片地址
  25. */
  26. @Element(name = "image")
  27. public String image;
  28. /**
  29. * 描述
  30. */
  31. @Element(name = "description")
  32. public String description;
  33. /**
  34. * 点击数量
  35. */
  36. @Element(name = "hitcount")
  37. public String hitCount;
  38. /**
  39. * 评论数量
  40. */
  41. @Element(name = "commentcount")
  42. public String commentCount;
  43. /**
  44. * 禁止评论? false true
  45. */
  46. @Element(name = "forbidcomment")
  47. public boolean forbidComment;
  48. @Element(name = "cid")
  49. public String cid;
  50. }

正式开始用Simple XML进行解析

  1. Persister persister = new Persister();
  2. ScienceRSS scienceRSS = persister.read(ScienceRSS.class, result);
  3. ScienceChannel scienceChannel = scienceRSS.scienceChannel;
  4. return scienceChannel.getmScienceNewsList();

怎么样,是不是非常简单啊.不过现在用XML是真的少,一般都用JSON.了解一下还是好的.

发表评论

表情:
评论列表 (有 0 条评论,372人围观)

还没有评论,来说两句吧...

相关阅读

    相关 XML的运用(XML解析

    一、XML文件的三种配置位置机读取方式 > Java中配置XML文件的三种配置位置机读取方式:常用的三种 1、同包下 在演式之前我们把前期演示的部分给准备好:

    相关 解析XML

    在tomcat的webapps下ROOT目录下创建xml文件,记得右键另存改编码方式为UTF-8 下面上代码: xml部分: <?xml version="1.0