Android XML解析失败意外令牌

时间:2012-05-08 15:13:14

标签: android xml sax

在我的应用程序(游戏)中,我需要阅读XML脚本并将其转换为类对象;我已经通过DOM

完成了整个XML阅读器

但是当我跑步时,我收到以下错误:

05-08 23:03:22.342: I/System.out(588): XML Pasing Excpetion = org.xml.sax.SAXParseException: Unexpected token (position:TEXT ��������������������...@1:69 in java.io.InputStreamReader@4129a200) 

我已经阅读了一些有关此问题的答案,但他们都未能解决我的问题(http://stackoverflow.com/questions/7885962/android-utf-8-file-parsing)..

这是我的代码:

    InputStream inputStream = ctx.getResources().openRawResource(R.xml.script);
ctx.getApplicationContext().getPackageName()+"/xml/"+path);



        Reader reader = new InputStreamReader(inputStream,"UTF-8");

        InputSource is = new InputSource(reader);
        is.setEncoding("UTF-8");


        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();


        Document root = db.parse(is);

根据问题,我也试过这个:

 InputStream inputStream = ctx.getResources().openRawResource(R.xml.script);
 Document root = db.parse(inputStream);

产生完全相同的例外...

如何解决这个问题?

我的xml文件:

<script>

<scene no="0">
    <character id="1">1</character>

    <dialog no="1">
        <title>1</title>
 Sub-Element 1
    </dialog>
</scene>



</script>

2 个答案:

答案 0 :(得分:6)

您的XML无效。 “子元素1”应该在元素本身内。 XML文档也应该以标记为XML的标记开头:<?xml version="1.0" ?>所以你的完整文件将是:

<?xml version="1.0" ?>
<script>
<scene no="0">
    <character id="1">1</character>
    <dialog no="1">
        <title>1</title>
        <something_else>Sub-Element 1</something_else>
    </dialog>
</scene>
</script>

或者您可以使用“子元素”作为元素名称(而不是something_else),并使用1作为值。

答案 1 :(得分:3)

您在哪里存储xml文件?在“res”文件夹中。您应该将其存储在“资产”中。由于“res”文件夹的特定性以及它在apk中的显示,Res-solution无法正常工作。将您的文件移动到“资产”,您将看到一切正常。 使用以下代码创建InputSource

getAssets().open("yourfilename.xml")