2012-12-30 39 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在这里是正确的。

相关问题