[英]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 事件?
如果您正在解析一個文件並且該文件不包含格式正確的 XML,那么您唯一可以確定的是將報告錯誤。 您描述的兩種情況(空文件和僅包含 XML 聲明的文件)都不是格式正確的,因此除了錯誤之外,您不能依賴任何東西。
話雖如此,如果我沒記錯的話,StAX 解析器報告的事件序列之間存在差異,即使在格式良好的情況下也是如此。 值得用多個代碼測試您的代碼。
由於 XML 聲明是可選的,因此這兩個文件都可以同等解析。
兩者都不是良構的(因為良構的 XML 必須有一個根元素),但特別是從像 StAX 這樣的事件解析器的角度來看,它們是一回事。
在START_DOCUMENT
事件之后,下一個hasNext
調用應該拋出一個XMLStreamException
表明文檔格式不正確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.