StAX:START_DOCUMENT 空 XML 文件
StAX: START_DOCUMENT on empty XML file
我正在尝试了解关于 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 事件?
如果您正在解析一个文件并且该文件不包含 well-formed XML,那么您唯一可以确定的是将报告一个错误。您描述的两种情况(空文件和仅包含 XML 声明的文件)都不是 well-formed,因此除了错误之外您不能依赖任何东西。
话虽如此,如果我没记错的话,StAX 解析器在它们报告的事件序列中存在差异,即使在 well-formed 的情况下也是如此。用不止一个来测试你的代码是值得的。
两个文件都同样可解析,因为 XML 声明是可选的。
都不是well-formed(因为一个well-formedXML肯定有一个根元素),但是特别是从像StAX这样的事件解析器的角度来看,这些是一回事.
在 START_DOCUMENT
事件之后,下一个 hasNext
调用应该抛出 XMLStreamException
指示文档不是 well-formed.
我正在尝试了解关于 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 事件?
如果您正在解析一个文件并且该文件不包含 well-formed XML,那么您唯一可以确定的是将报告一个错误。您描述的两种情况(空文件和仅包含 XML 声明的文件)都不是 well-formed,因此除了错误之外您不能依赖任何东西。
话虽如此,如果我没记错的话,StAX 解析器在它们报告的事件序列中存在差异,即使在 well-formed 的情况下也是如此。用不止一个来测试你的代码是值得的。
两个文件都同样可解析,因为 XML 声明是可选的。
都不是well-formed(因为一个well-formedXML肯定有一个根元素),但是特别是从像StAX这样的事件解析器的角度来看,这些是一回事.
在 START_DOCUMENT
事件之后,下一个 hasNext
调用应该抛出 XMLStreamException
指示文档不是 well-formed.