2012-05-08 76 views
3

在我的應用程序(遊戲)中,我需要讀取一個XML腳本並將其轉入類對象;Android XML解析失敗意外的令牌

05-08 23:03:22.342: I/System.out(588): XML Pasing Excpetion = org.xml.sax.SAXParseException: Unexpected token (position:TEXT ��������������������[email protected]:69 in [email protected]) 

我讀過有關這一些答案,但他們都未能解決我的問題(HTTP:我已經通過DOM

但是當我跑,我得到了以下錯誤完成了整個XML閱讀器://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> 

回答

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作爲價值。

3

你在哪裏存儲你的xml文件?在「res」文件夾中。您應該將其存儲在「資產」中。由於特定的「res」文件夾,Res解決方案無法工作,它在apk中呈現。移動你的文件到「資產」,你會看到一切正常。 使用以下代碼創建輸入源

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