Java StAX:在空XML文件上启动\u文档
我正试图了解StAX设计与活动的关系。典型的while循环是:Java StAX:在空XML文件上启动\u文档,java,xml,stax,Java,Xml,Stax,我正试图了解StAX设计与活动的关系。典型的while循环是: XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); try { XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(new FileInputStream(fileName)); while(xmlEventReader.hasNext()) { XMLE
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
try {
XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(new FileInputStream(fileName));
while(xmlEventReader.hasNext()) {
XMLEvent xmlEvent = xmlEventReader.nextEvent();
switch( xmlEvent.getEventType() ) {
[...]
使用此循环无法区分空XML文件和仅具有XML版本的XML文件。例如:
% test -s empty.xml || echo empty
empty
% cat start.xml
<?xml version="1.0" encoding="UTF-8"?>
%test-s empty.xml | | echo empty
空的
%cat start.xml
上述两个文件产生完全相同的StAX事件系列(一个START_文档)。这种行为是否有记录?如果文件为空,为什么会有人想要启动文档事件?如果您正在解析文件,而该文件不包含格式良好的XML,那么唯一可以确定的是将报告错误。您描述的两种情况(一个空文件和一个只包含XML声明的文件)都不是格式良好的,因此除了错误之外,您不能依赖任何东西
话虽如此,如果我没记错的话,StAX解析器在报告的事件序列上存在差异,即使在格式良好的情况下也是如此。值得使用多个文件测试您的代码。由于XML声明是可选的,所以这两个文件都是同样可解析的 两者都不是格式良好的(因为格式良好的XML必须有根元素),但特别是从事件解析器(如StAX)的角度来看,它们是相同的
在
START\u DOCUMENT
事件之后,下一个hasNext
调用应该抛出一个XMLStreamException
,指示文档的格式不正确。由于XML声明是可选的,所以两个文件都是同样可解析的。两者都不是格式良好的(主要是因为格式良好的XML必须有一个根元素),但特别是从事件解析器(如stax)的角度来看,它们是相同的。请发布,我会接受。我不知道有多个StAX实现。在我看来,我假设hasNext()
意味着fpeek()没有返回EOF
JDK附带了一个实现,还有Woodstox。Woodstox在我(不是最近)的经历中要好得多。