好的,在学习如何使用StAX
API处理XML时。我看到有两种方法可以解析XML文档:
Cursor API
是您使用XMLStreamReader
及其next()
和hasNext()
方法的地方。
Iterator API
使用XMLEventReader
的方式与上述方法大致相同。
这本书总结了Iterator API
只是一段不太具描述性的段落。它表示当您想要查看接下来会发生什么事件并根据XMLEvent
的值时使用此功能时,您可以使用XMLStreamReader
跳过或处理即将发生的事件。
我无法理解这一点。有人可以解释如何?
import javax.xml.stream.*;
import javax.xml.stream.events.*;
import java.io.*;
public class StaxCursorDemo{
public static void main(String[] args){
try{
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
InputStream input = new FileInputStream(new File("helloWorld.xml"));
XMLStreamReader xmlStreamReader = inputFactory.createXMLStreamReader(input);
while(xmlStreamReader.hasNext()){
int event = xmlStreamReader.next();
if(event == XMLStreamConstants.START_DOCUMENT){
System.out.println("Beginning parsing of document");
}
if(event == XMLStreamConstants.END_DOCUMENT){
System.out.println("Ending parsing of document");
}
if(event == XMLStreamConstants.COMMENT){
System.out.println("NOTE: " + xmlStreamReader.getText());
}
if(event == XMLStreamConstants.START_ELEMENT){
System.out.println("Beginning Element: " + xmlStreamReader.getLocalName());
for(int i = 0;i<xmlStreamReader.getAttributeCount();i++){
System.out.println("Attribute is: " + xmlStreamReader.getAttributeLocalName(i));
System.out.println("Attribute value is: " + xmlStreamReader.getAttributeValue(i));
}
}
if(event == XMLStreamConstants.END_ELEMENT){
System.out.println("End Element: ");
}
if(event == XMLStreamConstants.CHARACTERS){
System.out.println("Value: " + xmlStreamReader.getText());
}
}
}catch(FactoryConfigurationError e){
System.out.println(e.getMessage());
}catch(XMLStreamException e){
System.out.println(e.getMessage());
}catch(IOException e){
System.out.println(e.getMessage());
}
}
}
答案 0 :(得分:2)
可能还有更多内容,但XMLEventReader
提供XMLEvent
- 提供更多灵活性和功能的对象,而XMLStreamReader
不会为您创建这些对象。
因此,XMLStreamReader
效果更好,XMLEventReader
为您提供了更多功能。