有没有办法将 XMLStreamReader 值临时存储在另一个 XMLStreamReader 中以进行验证?

如何解决有没有办法将 XMLStreamReader 值临时存储在另一个 XMLStreamReader 中以进行验证?

我不确定这是否可行,因此无论如何都想询问并澄清,因为即使经过大量搜索和尝试,我也无法在此处找到与此类似的任何内容。如果发现重复,真的很抱歉。

我正在尝试使用 XMLStreamReader 解析 XML 文件。阅读后,我必须对我的 localpart 进行一些检查,我需要根据这些检查将此 XMLStreamReader 分配给不同的类。

当我进行少量检查时,我需要检查 current localpartnext localpart。当我尝试检查 next localpart 时,我正在前进到 next 上的 XMLStreamReader 元素。因此,我试图将 current XMLStreamReader 存储在另一个 temp XMLStreamReader 中,但是在分配之后,当我尝试导航到 current XMLStreamReader 上的下一个时,即使 temp XMLStreamReader 也在发生变化,我猜是因为我无法执行某些操作。主要是我想执行 JAXB Unmarshalling,在此期间它无法获取类的所有元素而失败。

我知道 XMLEventReaderpeek() 但这也失败了,所以我试图存储 current XMLStreamReader 但它也不起作用,我读到它不是最有效的内存。由于我的 XML 文件可能非常大,我正在尝试使用 XMLStreamReader

public class Main
{
    public static void main(String[] args) {
        final InputStream inputStream = Main.class.getClassLoader().getResourceAsstream("Customer.xml");
        final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
        final XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(xmlStream);
        //final JAXBContext jaxbContext = JAXBContext.newInstance("io.model.jaxb");
        //final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        
        //Navigate to next and start of the XML Elements
        xmlStreamReader.next();
        
        //Read Until the end of the file
        while (xmlStreamReader.hasNext()) {
            
            //Check if the current `XML Tag` is "extension"
            if (xmlStreamReader.isstartElement() && xmlStreamReader.getLocalName().equalsIgnoreCase("extension")) {
                
                //Create a tempStream to store the current stream values
                //final XMLStreamReader streamReader = xmlInputFactory.createXMLStreamReader((InputStream) xmlStreamReader);
                final XMLStreamReader tempReader = xmlStreamReader;
                xmlStreamReader.next();
                
                //If the next element is "nextextension"
                if (xmlStreamReader.isstartElement() && xmlStreamReader.getLocalName().equalsIgnoreCase("nextextension")) {
                    System.out.println("Double Extension Assign to CLASS C with both extension tag");
                    //final C cInfo = unmarshaller.unmarshal(streamReader,C.class).getValue();
                }else{
                    System.out.println("Single Extension Assign to CLASS B with single extension tag");
                    //final B cInfo = unmarshaller.unmarshal(streamReader,B.class).getValue();
                }
                
            }
            
            //Move to the next
            xmlStreamReader.next();
        }
    }
}

我希望我能够解释这个问题。我只想知道是否有办法实现以下任何一项:

  1. current XMLStreamReader 临时存储在另一个 temp XMLStreamReader 中,以便以后使用。
  2. 如果有任何其他方式可以peek()进入next localpart内的XMLStreamReader

很高兴能从这里的专家那里获得一些意见,因为我从昨天开始就被困在这个问题上。

解决方法

发布此答案,因为它将来对某人有用。经过大量尝试和研究后,我发现我们可以将流存储在 MutableXMLStreamBuffer 中。

//Store the XMLStreamReader values within the buffer
final MutableXMLStreamBuffer buffer = new MutableXMLStreamBuffer();
buffer.createFromXMLStreamReader(xmlStreamReader);

然后您可以使用以下方法访问相同内容:

buffer.readAsXMLStreamReader()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?