XMLStreamReader和XMLEventReader有什么区别?

问题描述 投票:9回答:2

我浏览网页。我发现XMLStreamReader是用于解析XML的Cursor样式API。 XMLEventReader是用于解析XML的Iterator样式API。任何人都可以详细告诉我吗?

java xml xml-parsing stax xmlstreamreader
2个回答
7
投票

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

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


1
投票

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

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

VS

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

因此,每次为事件阅读器创建一个额外的事件对象。由于存在许多事件,因此开销可能很大。

© www.soinside.com 2019 - 2024. All rights reserved.