Android上使用XML SAX解析器
2010-05-28 15:52:00 来源:WEB开发网if (this.currentMessage != null){
if (localName.equalsIgnoreCase(TITLE)){
currentMessage.setTitle(builder.toString());
} else if (localName.equalsIgnoreCase(LINK)){
currentMessage.setLink(builder.toString());
} else if (localName.equalsIgnoreCase(DESCRIPTION)){
currentMessage.setDescription(builder.toString());
} else if (localName.equalsIgnoreCase(PUB_DATE)){
currentMessage.setDate(builder.toString());
} else if (localName.equalsIgnoreCase(ITEM)){
messages.add(currentMessage);
}
builder.setLength(0);
}
}
@Override
public void startDocument() throws SAXException {
super.startDocument();
messages = new ArrayList
builder = new StringBuilder();
}
@Override
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, name, attributes);
if (localName.equalsIgnoreCase(ITEM)){
this.currentMessage = new Message();
}
}
}
RssHandler 类扩展了 org.xml.sax.helpers.DefaultHandler 类。该类为 SAX 解析器生成的事件所对应的所有方法都提供了一个默认的非操作实现。这允许子类根据需要仅覆盖一些方法。RssHandler 提供了一个额外的 API,即 getMessages。它返回处理程序在从 SAX 解析器接收事件时所收集的 Message 对象列表。它有另外两个内部变量,currentMessage 针对被解析的 Message 实例,以及名称为 builder 的 StringBuilder 变量,用于存储文本节点中的字符数据。解析器将相应事件发送给处理程序时会调用 startDocument 方法,这两个变量的初始化操作就是在此时完成。
查看 清单 6 中的 startElement 方法。在 XML 文档中每次遇到开始标记时都会调用它。您只关心该标记何时为 ITEM 标记。对于这种情况,您将创建一个新的 Message。现在来看 characters 方法。遇到文本节点中的字符数据时便会调用此方法。数据只是被添加到
更多精彩
赞助商链接