簡體   English   中英

StAX:空 XML 文件上的 START_DOCUMENT

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM