/**
* 使用Android中的API解析Assets中的XML檔案,這裡好像必須用這個。用Java內建的不行,好像是因為編譯過。。。。。
*
* @param fileName 此檔案必須在assets檔案夾下,要開啟的xml檔案名稱。例如: "firstData/bg1_1_10.xml"
* @param tbName 要插入資料庫的表名,資料庫中的表結構必須和XML檔案中的資料結構一一對應,否則會在插入資料庫的時候出錯
*/
1 /** 2 * 使用Android中的API解析Assets中的XML檔案,這裡好像必須用這個。用Java內建的不行,好像是因為編譯過。。。。。 3 * 4 * @param fileName 此檔案必須在assets檔案夾下,要開啟的xml檔案名稱。例如: "firstData/bg1_1_10.xml" 5 * @param tbName 要插入資料庫的表名,資料庫中的表結構必須和XML檔案中的資料結構一一對應,否則會在插入資料庫的時候出錯 6 */ 7 private void insertDataFromAssetsXML(String fileName, String tbName) { 8 try { 9 XmlPullParserFactory factory;10 factory = XmlPullParserFactory.newInstance();11 factory.setNamespaceAware(true);12 XmlPullParser xpp;13 xpp = factory.newPullParser();14 xpp.setInput(getResources().getAssets().open(fileName),null);15 16 int eventType = xpp.getEventType();17 boolean needs = false ;18 String sql = "" ; // 插入資料庫的sql語句19 sql = "insert into " + tbName + " values (" ;20 21 db.sld.beginTransaction() ; // 開始交易處理22 while (eventType != XmlPullParser.END_DOCUMENT) {23 24 if (eventType == XmlPullParser.START_DOCUMENT) {25 } else if (eventType == XmlPullParser.START_TAG) {26 if(!xpp.getName().equals("RECORD") && !xpp.getName().equals("RECORDS")) {27 needs = true ;28 }29 } else if (eventType == XmlPullParser.END_TAG) {30 //Log.e("xml", "End tag " + xpp.getName());31 if(xpp.getName().equals("RECORD")) {32 sql = sql.substring(0, sql.length()-1) ;33 sql += ") ;" ;34 sql = sql.replace("\n", "") ;35 // Log.w("sql", sql) ;36 db.insert(sql); // 插入資料庫37 sql = "insert into " + tbName + " values (" ;38 }39 } else if (eventType == XmlPullParser.TEXT) {40 if (!xpp.getText().equals("") && needs) {41 sql += "'"+ xpp.getText() +"'," ;42 needs = false ;43 }44 }45 eventType = xpp.next();46 }47 48 db.sld.setTransactionSuccessful() ; // 開始交易處理49 db.sld.endTransaction(); // 交易處理完成50 51 } catch (XmlPullParserException e) {52 e.printStackTrace();53 } catch (IOException e) {54 e.printStackTrace();55 } catch (Exception e) {56 e.printStackTrace();57 }58 }
使用:insertDataFromAssetsXML("firstData/imp_multilevel.xml", "imp_multilevel") ;
imp_multilevel這個是sqlite資料庫的表名喔。
還有上面的db是一個sqlite資料庫物件額,自己加上去就ok了啦 !!!