StAX
さて、 APIを使用して XML を処理する方法を学習するとき。XML ドキュメントを解析するには、次の 2 つの方法があることがわかりました。
は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());
}
}
}