Geronimo 叛逆者: 使用集成软件包:Codehaus 的 Woodstox
2010-04-06 00:00:00 来源:WEB开发网StAX 备选方案
SAX 中的复杂度来自它实现的 Observer 设计模式。它是一个 push 模型,因为解析器将把事件 push 到随后作用于事件的 observer 中。StAX 模型类似于 SAX。它将来自 XML 文档的数据和事件流线化,使其可以像 SAX 一样快速且高效。最大的不同之处是它使用 pull 模型。这将允许应用程序代码从解析器中 pull 事件。
这可能听起来像是一个细微的差异,但是它将允许使用更简单的编程模型。查阅清单 5 以查看 StAX 的运作。
清单 5. 用 StAX 进行解析
Map<String,String> map = new HashMap<String,String>();
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
QName qId = new QName("id");
QName qTitle = new QName("title");
QName qPhoto = new QName("photo");
XMLEventReader reader = inputFactory.createXMLEventReader(input);
while (reader.hasNext()){
XMLEvent event = reader.nextEvent();
if (event.isStartElement()){
StartElement element = event.asStartElement();
if (element.getName().equals(qPhoto)){
String id = element.getAttributeByName(qId).getValue();
String title = element.getAttributeByName(qTitle).getValue();
map.put(id,title);
}
}
}
reader.close();
首先,您不必扩展任何类。那是因为您无需为事件进行注册。使用 StAX,您可以控制事件流,因为将从解析器中 pull 这些事件流。您可以使用一种熟悉的类似迭代器的语法来搜索整个文档以查找所需的数据。您仍将只存储所需的数据,并且只需浏览 XML 文档一次。您将获得与使用 SAX 时一样的效率,但是代码将直观得多。
更多精彩
赞助商链接