Android XML读写(四)

移动开发 Android
在Java环境中,当您需要一个速度快的解析器并且希望最大限度减少应用程序的内存占用时,通常可以使用SAX API。这非常适用于运行Android的移动设备。您可以在Java环境中照原样使用SAX API,在Android上运行它不需要做任何修改。显示了de>FeedParserde>接口的一个SAX实现。

如示例所示,一个 de >ITEMde > 对应于一个 de >Messagede > 实例。项目的子节点(de >TITLEde >、de >LINKde > 等)对应于 de >Messagede > 实例的属性。现在,您已经对提要有了一定的认识,并且已经创建了所有常用部分,接下来看看如何使用 Android 上可用的各种技术来解析这个提要。您将从 SAX 开始。

使用 SAX

在 Java 环境中,当您需要一个速度快的解析器并且希望***限度减少应用程序的内存占用时,通常可以使用 SAX API。这非常适用于运行 Android 的移动设备。您可以在 Java 环境中照原样使用 SAX API,在 Android 上运行它不需要做任何修改。显示了 de >FeedParserde > 接口的一个 SAX 实现。

SAX 实现

java代码:

  1. public class SaxFeedParser extends BaseFeedParser { 
  2. protected SaxFeedParser(String feedUrl){ 
  3. super(feedUrl); 
  4. public List< Message > parse() { 
  5. SAXParserFactory factory = SAXParserFactory.newInstance(); 
  6. try { 
  7. SAXParser parser = factory.newSAXParser(); 
  8. RssHandler handler = new RssHandler(); 
  9. parser.parse(this.getInputStream(), handler); 
  10. return handler.getMessages(); 
  11. catch (Exception e) { 
  12. throw new RuntimeException(e); 

如果您以前使用过 SAX,那么这对您肯定非常熟悉。与任何 SAX 实现相同,大多数细节都在 SAX 处理程序中。在分解 XML 文档时,处理程序从 SAX 解析器接收事件。在本例中,您创建了一个新的名称为 de >RssHandlerde > 的类,并将它注册为解析器的处理程序,如 所示。

SAX 处理程序

  1. import static org.developerworks.android.BaseFeedParser.*; 
  2. public class RssHandler extends DefaultHandler{ 
  3. private List< Message > messages; 
  4. private Message currentMessage; 
  5. private StringBuilder builder; 
  6. public List< Message > getMessages(){ 
  7. return this.messages; 
  8. @Override 
  9. public void characters(char[] ch, int start, int length) 
  10. throws SAXException { 
  11. super.characters(ch, start, length); 
  12. builder.append(ch, start, length); 
  13. @Override 
  14. public void endElement(String uri, String localName, String name) 
  15. throws SAXException { 
  16. super.endElement(uri, localName, name); 
  17. if (this.currentMessage != null){ 
  18. if (localName.equalsIgnoreCase(TITLE)){ 
  19. currentMessage.setTitle(builder.toString()); 
  20. else if (localName.equalsIgnoreCase(LINK)){ 
  21. currentMessage.setLink(builder.toString()); 
  22. else if (localName.equalsIgnoreCase(DESCRIPTION)){ 
  23. currentMessage.setDescription(builder.toString()); 
  24. else if (localName.equalsIgnoreCase(PUB_DATE)){ 
  25. currentMessage.setDate(builder.toString()); 
  26. else if (localName.equalsIgnoreCase(ITEM)){ 
  27. messages.add(currentMessage); 
  28. builder.setLength(0); 
  29. @Override 
  30. public void startDocument() throws SAXException { 
  31. super.startDocument(); 
  32. messages = new ArrayList< Message >(); 
  33. builder = new StringBuilder(); 
  34. @Override 
  35. public void startElement(String uri, String localName, String name,Attributes attributes) throws SAXException { 
  36. super.startElement(uri, localName, name, attributes); 
  37. if (localName.equalsIgnoreCase(ITEM)){ 
  38. this.currentMessage = new Message(); 
  39. }
责任编辑:闫佳明 来源: my.eoe.cn
相关推荐

2013-06-09 10:25:56

Android开发XML读写XML解析

2013-06-09 10:18:29

Android开发XML读写XML解析

2013-06-09 11:31:13

Android开发XML读写XML解析

2013-06-09 12:49:15

Android开发XML读写XML解析

2013-06-09 12:53:05

Android开发XML读写XML解析

2013-06-09 13:07:23

Android开发XML读写XML解析

2013-06-09 10:04:35

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

2010-12-23 09:11:17

读写Android文件

2013-06-08 13:07:54

Android开发Android UILayout XML属

2013-06-08 13:18:50

Android开发XML构造技巧XML解析

2013-06-08 12:49:03

Android开发XML定义菜单

2013-06-08 13:29:27

Android开发DOM读取XMLXML解析

2013-04-01 14:35:10

Android开发Android自定义x

2013-06-08 11:13:00

Android开发XML解析

2013-06-08 13:37:28

Android开发XML解析Pull方式

2010-01-25 18:22:33

Android使用XM

2011-06-22 15:21:08

XML
点赞
收藏

51CTO技术栈公众号