1

StAXさて、 APIを使用して XML を処理する方法を学習するとき。XML ドキュメントを解析するには、次の 2 つの方法があることがわかりました。

  • カーソル API
  • イテレータ API
  • Cursor API使用する場所でXMLStreamReaderありnext()hasNext()メソッドです。
    使用方法Iterator APIXMLEventReader上記とほぼ同じです。

    この本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());
            }
        }
    }
    
    4

    1 に答える 1

    2

    もっと多くの機能があるかもしれませんが、より柔軟で機能的なオブジェクトをXMLEventReader提供しますが、これらのオブジェクトは作成しません。XMLEventXMLStreamReader

    したがって、XMLStreamReaderパフォーマンスが向上しXMLEventReader、すぐに使用できる機能がいくつか提供されます。

    于 2013-06-04T07:06:57.527 に答える