好的,在学习如何使用StAX
API 处理 XML 时。我看到它有两种方法可以解析 XML 文档,即:
这Cursor API
是你使用的地方XMLStreamReader
,它的next()
和hasNext()
方法。用法
与上面大致相同。Iterator API
XMLEventReader
Iterator API
本书仅用一段描述性不强的段落总结了这一点。它表示当您想查看接下来会发生什么事件时使用它,并且基于 的值XMLEvent
,您可以使用XMLStreamReader
跳过或处理即将发生的事件。
我无法理解这一点。有人可以解释一下如何吗?
用于光标 API 的 SSCCE
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());
}
}
}