【问题标题】:What is the difference between XMLStreamReader and XMLEventReader?XMLStreamReader 和 XMLEventReader 有什么区别?
【发布时间】:2016-08-11 13:45:58
【问题描述】:

我在网上冲浪。我发现 XMLStreamReader用于解析 XML 的光标样式 API。 XMLEventReaderIterator style API for Parsing XML。谁能详细告诉我?

【问题讨论】:

标签: java xml xml-parsing stax xmlstreamreader


【解决方案1】:

两者之间的一个区别是XMLEventReader 支持peek(),而XMLStreamReader 不支持。

【讨论】:

  • 您好,我也在尝试在我的应用程序中使用XMLStreamReader,但对于某些事件,它无法按预期工作。如果您有机会,我已在此处发布问题,请查看并提供您的建议:stackoverflow.com/questions/67667516/…
【解决方案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());
}

所以每次都会为事件阅读器创建一个额外的事件对象。由于有很多很多事件,开销可能很大。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 嗨,我也在尝试在我的应用程序中使用 XMLStreamReader,但对于某些事件,它无法按预期工作。如果您有机会,我已在此处发布问题,请查看并提供您的建议:stackoverflow.com/questions/67667516/…
    猜你喜欢
    • 2013-06-02
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    • 2015-03-26
    相关资源
    最近更新 更多