XMLStreamReader 和 XMLEventReader 之间有什么区别?

2022-09-04 19:47:56

我在网上冲浪。我发现 XMLStreamReader用于解析 XML 的 Cursor 样式 APIXMLEventReader用于解析XML的迭代器样式API。谁能详细告诉我?


答案 1

看看解释:https://www.ibm.com/developerworks/library/x-stax1/

XMLStreamReader 和 XMLEventReader 都允许应用程序自行迭代底层 XML 流。这两种方法之间的区别在于它们如何公开已分析的 XML 信息集的各个部分。XMLStreamReader 充当游标,它指向最近分析的 XML 令牌之外,并提供用于获取有关它的详细信息的方法。这种方法非常节省内存,因为它不会创建任何新对象。但是,业务应用程序开发人员可能会发现 XMLEventReader 稍微直观一些,因为它实际上是一个标准的 Java 迭代器,它将 XML 转换为事件对象流。每个事件对象依次封装与其表示的特定 XML 结构相关的信息。本系列的第 2 部分将提供基于事件迭代器的 API 的详细说明。至于使用哪种 API 样式取决于具体情况。与基于游标的 API 相比,基于事件迭代器的 API 表示更面向对象的方法。因此,它更容易应用于模块化架构,因为当前的解析器状态反映在事件对象中;因此,应用程序组件在处理事件时不需要访问解析器/读取器。此外,可以使用XMLInputFactory的createXMLEventReader(XMLStreamReader)方法从XMLStreamReader创建XMLEventReader。


答案 2

我认为不同之处在于流阅读器实际上代表了事件。

XMLEvent event = eventReader.nextEvent();    
if(event.getEventType() == XMLStreamConstants.START_ELEMENT){
    StartElement startElement = event.asStartElement();
    System.out.println(startElement.getName().getLocalPart());
}

streamReader.next();
if(streamReader.getEventType() == XMLStreamReader.START_ELEMENT){
    System.out.println(streamReader.getLocalName());
}

因此,每次为事件读取器创建一个额外的事件对象。开销可能很大,因为有很多很多事件。


推荐