【问题标题】:Understanding the difference between Cursor API and Iterator API of StAX了解 StAX 的 Cursor API 和 Iterator API 的区别
【发布时间】:2013-05-04 17:57:46
【问题描述】:

好的,在学习如何使用StAX API 处理 XML 时。我看到它有两种方法可以解析 XML 文档,即:

  • 游标 API
  • 迭代器 API
  • Cursor API 是您使用 XMLStreamReader 的地方,它是 next()hasNext() 方法。
    Iterator API 使用 XMLEventReader 的方式与上面大致相同。

    本书仅用一段描述性不强的段落总结了Iterator API。它表示当您想查看接下来会发生什么事件时使用它,并且基于XMLEvent 的值,您可以使用XMLStreamReader 跳过或处理即将发生的事件。

    我无法理解这一点。谁能解释一下HOW?

    用于游标 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());
            }
        }
    }
    

    【问题讨论】:

      标签: java xml iterator cursor stax


      【解决方案1】:

      也许还有更多,但XMLEventReader 提供了XMLEvent-Objects,它为您提供了更多的灵活性和功能,而XMLStreamReader 不会为您创建这些对象。

      因此,XMLStreamReader 的性能更好,而XMLEventReader 为您提供了更多开箱即用的功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-22
        • 1970-01-01
        • 1970-01-01
        • 2018-01-19
        • 2020-12-12
        • 2016-08-20
        • 2013-10-26
        • 2012-07-05
        相关资源
        最近更新 更多