我不确定这是否可能,所以无论如何我都想询问并澄清,因为即使经过大量搜索和尝试,我也无法在这里找到类似的东西。如果发现重复真的很抱歉。
我正在尝试使用XMLStreamReader
. localpart
阅读后,我必须根据我需要将其分配XMLStreamReader
给不同的类进行一些检查。
当我进行少量检查时,我需要检查current localpart
以及next localpart
. 当我尝试检查next localpart
我正在推进到next
元素时XMLStreamReader
。因此,我尝试将其存储current XMLStreamReader
在另一个中temp XMLStreamReader
,但是在分配之后,当我尝试导航到下一个时,我猜current XMLStreamReader
即使它temp XMLStreamReader
正在发生变化,因此我无法执行某些操作。主要是我想JAXB Unmarshalling
在它失败的时候执行它,因为它无法获取类的所有元素。
我知道XMLEventReader
有peek()
但也失败了,所以我试图存储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();
}
}
}
我希望我能够解释这个问题。我想知道是否有办法实现以下任何一项:
- 暂时存放
current XMLStreamReader
在另一个temp XMLStreamReader
,以便以后使用。 - 如果有其他方法可以
peek()
进入next localpart
insideXMLStreamReader
。
从昨天开始我就陷入了这个问题,因此从这里的专家那里获得一些意见真是太好了。