【发布时间】:2020-09-10 07:56:56
【问题描述】:
我正在尝试了解有关 START_DOCUMENT 事件的 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"?>
以上两个文件产生完全相同的一系列 StAX 事件(一个 START_DOCUMENT)。这种行为是否记录在某处?为什么在空文件的情况下有人想要一个 START_DOCUMENT 事件?
【问题讨论】:
-
这两个文件都同样可解析,因为 XML 声明是可选的。两者都不是格式正确的(主要是因为格式正确的 XML 必须有一个根元素),但尤其是从像 stax 这样的事件解析器的角度来看,它们是一回事。
-
这有资格作为答案。请发帖,我会接受的。