解析XML会导致SAXParseException出现意外的文档结束

时间:2014-12-02 06:30:05

标签: android xml-parsing

我尝试从Android设备解析XML时遇到了一个奇怪的错误。奇怪的是,几天前解析xml的工作并没有触及代码。今天,加载xml将无法正常工作。

xml文件位于项目目录的“assets”文件夹中。

以下是我将特定xml文件的路径传递给名为MazeFileReader的解析器的部分。

private void generateFromFile() {
    Log.v(TAG, "Generating from file");
    File maze_file = new File(getCacheDir() + "/" + pregen_maze);
      if (!maze_file.exists()) try {

        InputStream is = getAssets().open(pregen_maze);
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();


        FileOutputStream fos = new FileOutputStream(maze_file);
        fos.write(buffer);
        fos.close();
      } catch (Exception e) { throw new RuntimeException(e); }

      MazeFileReader mazeFileReader = new MazeFileReader(getApplicationContext(), maze_file.getPath());

现在MazeFileReader正在采用该路径并尝试解析它。

private void load(String filename)
{
    try{

        File fXmlFile = new File(filename);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile); //Fails here
        doc.getDocumentElement().normalize();

        NodeList nList = doc.getElementsByTagName("Maze");

        for (int temp = 0 ; temp < nList.getLength() ; temp++) {

            ...
        }
    }
    catch (Exception e) { 
        e.printStackTrace(); 

我已经跟踪了错误,似乎这行代码在DocumentBuilderImpl

中执行
if (parser.nextToken() == XmlPullParser.END_DOCUMENT) {
            throw new SAXParseException("Unexpected end of document", null);
}

另外,我认为我的xml文件没有任何问题,因为我没有碰过它,而且它在几天前就已经开始工作了。我有4或5个其他xml文件已经全部工作,但今天,由于某种原因,所有文件都会遇到相同的SAXParseExceptionSAXParseException的可能原因是什么?是否有可能xml的文件路径不正确?

这是有问题的xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Maze>

    <sizeX>
4
    </sizeX>

    <sizeY>
4
    </sizeY>

    <roomNum>
0
    </roomNum>

    <partiters>
60
    </partiters>

    <cell_0>
173
    </cell_0>

    <cell_1>
132
    </cell_1>

    <cell_2>
140
    </cell_2>

    <cell_3>
198
    </cell_3>
</Maze>
编辑:我发现了一些东西。我检查了我的项目的旧版本,它仍然无法正常工作。然后我制作了一个新的模拟器并重新安装了该应用程序。现在它有效!!!这背后的原因是什么?

我发现了别的东西。如果我调试并逐步解析,xml文件将运行到SAXParserException。然后该文件将无法解析。但是,如果我不调试它并在新设备上重新安装应用程序,则xml会正确解析。顺便说一下,xml位于assets文件夹中。为什么Android表现出这种行为? xml文件是否以某种方式被破坏了?

0 个答案:

没有答案