gpt4 book ai didi

java - 了解 StAX 的 Cursor API 和 Iterator API 之间的区别

转载 作者:行者123 更新时间:2023-11-30 04:23:48 31 4
gpt4 key购买 nike

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

  • 光标 API
  • 迭代器 API
  • 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());
    }
    }
    }

    最佳答案

    也许还有更多,但是XMLEventReader交付XMLEvent - 为您提供更多灵 active 和功能的对象,而 XMLStreamReader不会为您创建这些对象。

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

    关于java - 了解 StAX 的 Cursor API 和 Iterator API 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16377312/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com