我浏览网页。我发现 XMLStreamReader 是用于解析XML的Cursor样式API 。 XMLEventReader 是用于解析XML的迭代器样式API 。任何人都可以详细告诉我吗?
答案 0 :(得分: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 :(得分: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());
}
因此,每次为事件读取器创建一个额外的事件对象。发生的事件很多,因此开销可能很大。
答案 2 :(得分:0)
两者之间的区别是XMLEventReader
支持peek()
,而XMLStreamReader
不支持。