Android xml读写
2010-05-31 14:32:00 来源:WEB开发网Android SDK 提供了一个名称为 de >android.util.Xmlde > 的实用类。清单 7 展示了如何使用这个相同的实用类来设置一个 SAX 解析器。
清单 7. Android SAX 解析器
public class AndroidSaxFeedParser extends BaseFeedParser {
public AndroidSaxFeedParser(String feedUrl) {
super(feedUrl);
}
public List< Message > parse() {
RssHandler handler = new RssHandler();
try {
Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8, handler);
} catch (Exception e) {
throw new RuntimeException(e);
}
return handler.getMessages();
}
}
注意,这个类仍然使用了一个标准的 SAX 处理程序,因此您仅仅重用了 清单 7 中所示的 de >RssHandlerde >。能够重用 SAX 处理程序是非常不错的,但其代码稍微有些复杂。您可以想像,如果需要解析一个更加复杂的 XML 文档,则处理程序可能会带来各种各样的 bug。举例来说,回头看看 清单 6 中的 de >endElementde > 方法。注意,在尝试设置属性之前,它检查了 de >currentMessagede > 是否为 null。现在,再回头看看 清单 4 中的示例 XML。 注意,de >ITEMde > 标记外部有一些 de >TITLEde > 和 de >LINKde > 标记。这就是使用 null 检查的原因。否则,每一个 de >TITLEde > 标记 会导致一个 de >NullPointerExceptionde >。Android 提供了自己独有的 SAX API(参见 清单 8),它排除了您编写自己的 SAX 处理程序的需要。
清单 8. 经过简化的 Android SAX 解析器
public class AndroidSaxFeedParser extends BaseFeedParser {
public AndroidSaxFeedParser(String feedUrl) {
super(feedUrl);
}
public List< Message > parse() {
final Message currentMessage = new Message();
RootElement root = new RootElement("rss");
final List< Message > messages = new ArrayList< Message >();
Element channel = root.getChild("channel");
Element item = channel.getChild(ITEM);
更多精彩
赞助商链接