Java StAX:在空XML文件上启动\u文档

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

我正试图了解StAX设计与活动的关系。典型的while循环是:

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在我(不是最近)的经历中要好得多。