使用Android中的API解析Assets中的XML文件

/**
* 使用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了啦 !!!

原文地址:https://www.cnblogs.com/jinglingJuly/p/2984153.html