Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 理解StAX的游标API和迭代器API之间的区别_Java_Xml_Iterator_Cursor_Stax - Fatal编程技术网

Java 理解StAX的游标API和迭代器API之间的区别

Java 理解StAX的游标API和迭代器API之间的区别,java,xml,iterator,cursor,stax,Java,Xml,Iterator,Cursor,Stax,好的,当学习如何使用StAXAPI处理XML时。我看到有两种方法可以解析XML文档,即: 游标API 迭代器API cursorapi是使用XMLStreamReader的地方,它是next()和hasNext()方法。 迭代器API使用XMLEventReader的方式与上面的方式大致相同 这本书仅在一个不太具有描述性的段落中总结了迭代器API。它表示,当您想查看下一个将出现的事件时,可以使用此选项,并且根据XMLEvent的值,可以使用XMLStreamReader跳过或处理即将发生的事件

好的,当学习如何使用
StAX
API处理XML时。我看到有两种方法可以解析XML文档,即:
  • 游标API
  • 迭代器API
  • cursorapi
    是使用
    XMLStreamReader
    的地方,它是
    next()
    hasNext()
    方法。
    迭代器API
    使用
    XMLEventReader
    的方式与上面的方式大致相同

    这本书仅在一个不太具有描述性的段落中总结了迭代器API。它表示,当您想查看下一个将出现的事件时,可以使用此选项,并且根据
    XMLEvent
    的值,可以使用
    XMLStreamReader
    跳过或处理即将发生的事件

    我无法理解这件事。有人能解释一下怎么做吗

    用于游标API的SSCCE
    import javax.xml.stream.*;
    导入javax.xml.stream.events.*;
    导入java.io.*;
    公共类StaxCursorDemo{
    公共静态void main(字符串[]args){
    试一试{
    XMLInputFactory inputFactory=XMLInputFactory.newInstance();
    InputStream输入=新文件InputStream(新文件(“helloWorld.xml”);
    XMLStreamReader=inputFactory.createXMLStreamReader(输入);
    而(xmlStreamReader.hasNext()){
    int event=xmlStreamReader.next();
    if(event==XMLStreamConstants.START\u文档){
    System.out.println(“开始解析文档”);
    }
    if(event==XMLStreamConstants.END_文档){
    System.out.println(“结束文档解析”);
    }
    if(event==XMLStreamConstants.COMMENT){
    System.out.println(“注意:+xmlStreamReader.getText());
    }
    if(event==XMLStreamConstants.START_元素){
    System.out.println(“开始元素:+xmlStreamReader.getLocalName());
    
    对于(inti=0;i可能还有更多,但提供的对象给了您更多的灵活性和功能性,而不是为您创建这些对象

    因此,它的性能更好,同时为您提供了一些现成的功能

    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());
            }
        }
    }