如何解决有没有办法将 XMLStreamReader 值临时存储在另一个 XMLStreamReader 中以进行验证?
我不确定这是否可行,因此无论如何都想询问并澄清,因为即使经过大量搜索和尝试,我也无法在此处找到与此类似的任何内容。如果发现重复,真的很抱歉。
我正在尝试使用 XMLStreamReader
解析 XML 文件。阅读后,我必须对我的 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
内的XMLStreamReader
。
很高兴能从这里的专家那里获得一些意见,因为我从昨天开始就被困在这个问题上。
解决方法
发布此答案,因为它将来对某人有用。经过大量尝试和研究后,我发现我们可以将流存储在 MutableXMLStreamBuffer
中。
//Store the XMLStreamReader values within the buffer
final MutableXMLStreamBuffer buffer = new MutableXMLStreamBuffer();
buffer.createFromXMLStreamReader(xmlStreamReader);
然后您可以使用以下方法访问相同内容:
buffer.readAsXMLStreamReader()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。