zoukankan      html  css  js  c++  java
  • 使用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了啦 !!!

  • 相关阅读:
    win7和win10自带桌面便签哪里找
    ETC到底要不要办?有什么好处?
    H5 video poster属性—设置视频封面
    造成苹果手机卡顿的三个原因
    华为mate10 pro内置浏览器出现的令人头疼的样式兼容问题
    flex——justify-content属性引起的一个样式问题
    MacDown语法
    空字符的类型转换
    Vue设置全局的方法和样式
    Vue之拦截与响应拦截
  • 原文地址:https://www.cnblogs.com/jinglingJuly/p/2984153.html
Copyright © 2011-2022 走看看