Android XML读写(七)

移动开发 Android
Android 并未提供对 Java StAX API 的支持。但是,Android 确实附带了一个 pull 解析器,其工作方式类似于 StAX。它允许您的应用程序代码从解析器中获取事件,这与 SAX 解析器自动将事件推入处理程序相反。清单 10 显示了提要解析接口的一个 pull 解析器实现。

与***个 SAX 示例类似,以上代码完全没有特定于 Android 的地方。DOM 解析器将所有 XML 文档读取到内存中,然后允许您使用 DOM API 遍历 XML 树、检索所需的数据。这是非常直观的代码,并且,在某些方面比基于 SAX 的实现更加简单。但是,DOM 通常更加占用内存,因为一切内容都会先读取到内存中。这对于运行 Android 的移动设备来说是一个问题,但是当 XML 文档始终保持很小的大小时是可行的。这可能意味着,Android 的开发人员会认为 SAX 解析在 Android 应用程序上更加常见,因此为它提供了额外的实用工具。Android 还提供了另一种类型的 XML 解析器,它就是 pull 解析器。

XML pull 解析器

如前所述,Android 并未提供对 Java StAX API 的支持。但是,Android 确实附带了一个 pull 解析器,其工作方式类似于 StAX。它允许您的应用程序代码从解析器中获取事件,这与 SAX 解析器自动将事件推入处理程序相反。清单 10 显示了提要解析接口的一个 pull 解析器实现。

清单 10. 基于 Pull 解析器的实现

java代码:

  1. public class XmlPullFeedParser extends BaseFeedParser { 
  2. public XmlPullFeedParser(String feedUrl) { 
  3. super(feedUrl); 
  4. public List< Message > parse() { 
  5. List< Message > messages = null
  6. XmlPullParser parser = Xml.newPullParser(); 
  7. try { 
  8. // auto-detect the encoding from the stream 
  9. parser.setInput(this.getInputStream(), null); 
  10. int eventType = parser.getEventType(); 
  11. Message currentMessage = null
  12. boolean done = false
  13. while (eventType != XmlPullParser.END_DOCUMENT && !done){ 
  14. String name = null
  15. switch (eventType){ 
  16. case XmlPullParser.START_DOCUMENT: 
  17. messages = new ArrayList< Message >(); 
  18. break
  19. case XmlPullParser.START_TAG: 
  20. name = parser.getName(); 
  21. if (name.equalsIgnoreCase(ITEM)){ 
  22. currentMessage = new Message(); 
  23. else if (currentMessage != null){ 
  24. if (name.equalsIgnoreCase(LINK)){ 
  25. currentMessage.setLink(parser.nextText()); 
  26. else if (name.equalsIgnoreCase(DESCRIPTION)){ 
  27. currentMessage.setDescription(parser.nextText()); 
  28. else if (name.equalsIgnoreCase(PUB_DATE)){ 
  29. currentMessage.setDate(parser.nextText()); 
  30. else if (name.equalsIgnoreCase(TITLE)){ 
  31. currentMessage.setTitle(parser.nextText()); 
  32. break

 

责任编辑:闫佳明 来源: my.eoe.cn
相关推荐

2013-06-09 11:31:13

Android开发XML读写XML解析

2013-06-09 10:18:29

Android开发XML读写XML解析

2013-06-09 10:37:53

Android开发XML读写XML解析

2013-06-09 10:25:56

Android开发XML读写XML解析

2013-06-09 13:07:23

Android开发XML读写XML解析

2013-06-09 10:04:35

Android开发XML读写XML解析

2013-06-09 12:49:15

Android开发XML读写XML解析

2011-11-08 10:01:53

TinyXML

2013-06-08 13:02:11

Android开发XML解析

2013-06-08 11:04:18

Android开发Pull解析XMLAndroid XML

2013-06-08 13:07:54

Android开发Android UILayout XML属

2013-06-08 13:18:50

Android开发XML构造技巧XML解析

2010-12-23 09:11:17

读写Android文件

2013-06-08 12:49:03

Android开发XML定义菜单

2022-03-24 12:15:50

MySQL数据库读写分离

2013-06-08 13:29:27

Android开发DOM读取XMLXML解析

2013-04-01 14:35:10

Android开发Android自定义x

2013-06-08 13:37:28

Android开发XML解析Pull方式

2010-01-25 18:22:33

Android使用XM

2013-06-08 11:13:00

Android开发XML解析
点赞
收藏

51CTO技术栈公众号