2012-12-30 40 views
2

我想從使用XOM作爲XML庫的android應用上讀取xml文件。我想這樣的:在解析Android上的xml文件時提早結束文件

Builder parser = new Builder(); 
Document doc = parser.build(context.openFileInput(XML_FILE_LOCATION)); 

但是我卻越來越nu.xom.ParsingException: Premature end of file.即使文件是空的。

我需要解析一個非常簡單的XML文件,我準備好使用另一個庫而不是XOM,因此請告訴我是否有更好的庫。或者只是使用XOM解決問題的方案。我想用xerces來解析器。

------ -----編輯

PS:這樣做的目的並不是要分析一個空文件,該文件正好是在第一次運行這表明這個錯誤空。

+1

XML文件中的數據是什麼?似乎你至少在密碼標記''上缺少。 – Sam

+0

@sam文件爲空 –

+1

(對不起,我傾向於將重點放在代碼上,而不是口頭描述。)解析一個空文件似乎很愚蠢。也許你應該在試圖解析它之前檢查文件的大小。 – Sam

回答

2

如果您按照this後到最後,似乎這與xerces和事實,它的一個空文件,他們沒有達到xerces方的解決方案。

所以我處理的問題如下:

Document doc = null; 
try { 
    Builder parser = new Builder(); 
    doc = parser.build(context.openFileInput(XML_FILE_LOCATION)); 
}catch (ParsingException ex) { //other catch blocks are required for other exceptions. 
    //fails to open the file with a parsing error. 
    //I create a new root element and a new document. 
    //I fill them with xml data (else where in the code) and save them. 
    Element root = new Element("root"); 
    doc = new Document(root);  
} 

然後,我可以做我想做的事情與doc。您可以添加額外的檢查以確保原因確實是一個空文件(例如,按照sam對該問題的評論中的某個註釋來檢查文件大小)。

+0

而不是捕捉異常(我敢肯定,其他情況下也可能會拋出'ParsingException'),我想知道是否不會太難看,以檢查xml文件是不是'空'。也許你可以檢查基礎'FileChannel'的['size()'](http://developer.android.com/reference/java/nio/channels/FileChannel.html#size%28%29),或者[ 'FileInputStream'中的available()'](http://developer.android.com/reference/java/io/FileInputStream.html#available%28%29)字節? –

+0

@MH。是的...我說的代碼部分後。 –

+0

Whups,不知道我是如何忽略這一點的。 :/只是想確保你知道一個稍微更「乾淨」的方法。 –

1

空文件不是格式良好的XML文檔。拋出ParsingException在這裏是正確的。

相關問題