用AndroidStudio进行XML文件的解析

  这里因为公司业务需求需要用xml文件的方式来传递数据。所以用到了android的xml解析技巧。开发工具是androidstudio2.0.

  1.我的xml文件是放在assets目录下的。最开始犯了个错误,我发现studio文件目录下没有assets这个目录,我就按照在ADT上面开发的习惯,在res目录下建了个assets文件夹。获取文件的方法是

this.context.getAssets().open("文件名");

结果调试的时候,报了找不到文件的异常。后来查了一下资料,发现在AS上面是不一样的。在AS上面,assets文件夹要建立在与java、res平级的路径。
创建方法为,选择app这一级,右键

 



代码为:
inputStream=this.context.getClass().getClassLoader().getResourceAsStream("assets/sxx.XML");
返回的是一个InputStream对象。
贴代码:
 1 public void parse (){
 2         //初始化输入流
 3         InputStream inputStream = null;
 4         //获得XmlPullParser解析器
 5         XmlPullParser xmlParser = Xml.newPullParser();
 6         //声明filedList
 7         List<Field> filedList = null;
 8         //声明tableList
 9         List<Table> tableList = null;
10         //声明Table对象
11         Table table = null;
12         //声明Field对象
13         Field field = null;
14         try {
15 
16             //得到文件流,并设置编码方式
17             inputStream=this.context.getClass().getClassLoader().getResourceAsStream("assets/sxx.XML");
18             xmlParser.setInput(inputStream, "GB2312");
19             //获得解析到的事件类别,这里有开始文档,结束文档,开始标签,结束标签,文本等等事件。
20             int eventType=xmlParser.getEventType();
21             //一直循环,直到文档结束
22             while(eventType!=XmlPullParser.END_DOCUMENT){
23                 switch(eventType){
24 
25                     case XmlPullParser.START_DOCUMENT:
26                         //初始化list
27                         filedList = new ArrayList<Field>();
28                         tableList = new ArrayList<Table>();
29                         break;
30 
31                     case XmlPullParser.START_TAG:
32                         String tag = xmlParser.getName();
33                         //如果开始标签是“Table”
34                         if (tag.equalsIgnoreCase("Table")) {
35                             table = new Table();
36                             //取出Table标签中的一些属性值
37                             table.setNAME(xmlParser.getAttributeValue(null, "NAME"));
38                             table.setCODE(xmlParser.getAttributeValue(null,"CODE"));
39                             table.setID(xmlParser.getAttributeValue(null,"ID"));
40                         }else if(tag.equalsIgnoreCase("Field")){//如果开始标签是“Field”
41                             field = new Field();
42                             //取出Field标签中的一些属性值
43                             field.setNAME(xmlParser.getAttributeValue(null, "NAME"));
44                             field.setCODE(xmlParser.getAttributeValue(null, "CODE"));
45                             field.setTYPE(xmlParser.getAttributeValue(null, "TYPE"));
46                             field.setLEN(Integer.parseInt(xmlParser.getAttributeValue(null,"LEN")));
47                             field.setPrimary(Boolean.parseBoolean(xmlParser.getAttributeValue(null, "Primary")));
48                             field.setNull(Boolean.parseBoolean(xmlParser.getAttributeValue(null, "Null")));
49                         }
50                         break;
51 
52                     case XmlPullParser.END_TAG:
53                         //如果遇到Table标签结束,则把river对象添加进集合中
54                         if (xmlParser.getName().equalsIgnoreCase("Table") && table != null) {
55                             tableList.add(table);
56                             table = null;
57                         }else if (xmlParser.getName().equalsIgnoreCase("Field") && table != null){
58                             filedList.add(field);
59                             field = null;
60                         }
61                         break;
62                 }
63                 //如果xml没有结束,则导航到下一个节点
64                 eventType=xmlParser.next();
65             }
66             //从List中得到数据
67             Table tableEntity = tableList.get(0);
68             Log.i("table",tableEntity.getNAME()+"-"+tableEntity.getCODE()+"-"+tableEntity.getID());
69             for (Field f:filedList) {
70                 Log.i("filed",f.getNAME()+"-"+f.getTYPE()+"-"+f.getCODE()+"-"+f.getLEN());
71             }
72         } catch (IOException e) {
73             e.printStackTrace();
74             Toast.makeText(this.context,"文件获取异常",Toast.LENGTH_SHORT).show();
75         } catch (XmlPullParserException e) {
76             Toast.makeText(this.context,"XML解析异常",Toast.LENGTH_SHORT).show();
77             e.printStackTrace();
78         }
79     }

附:xml文件

<?xml version="1.0" encoding="GB2312" ?>
<Tables>
<Table NAME="会议管理" CODE="mt_meeting" ID="FA0E2AE7-B651-42D8-80D4-20022CF80F92" EnableEtlSynLog="">
<Fields>
<Field NAME="会议编号" CODE="mt_meetingid" TYPE="va" LEN="64" Primary="true" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="会议名称" CODE="mt_meetingname" TYPE="va" LEN="200" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="会议日期" CODE="mt_meetingdate" TYPE="date" LEN="0" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="会议开始时间" CODE="STARTDATETIME" TYPE="time" LEN="0" Primary="false" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="会议结束时间" CODE="ENDDATETIME" TYPE="time" LEN="0" Primary="false" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="主持人" CODE="SYNACZCR" TYPE="va" LEN="50" Primary="false" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="申报人电话" CODE="mt_personphone" TYPE="va" LEN="50" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="参会人数" CODE="SYNACCOUNT" TYPE="int" LEN="50" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="要点及目的" CODE="mt_desc" TYPE="va" LEN="2000" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="会议资料" CODE="SYNACFILE" TYPE="va" LEN="2000" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="会议资料名称" CODE="SYNACFILEFileName" TYPE="va" LEN="300" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="参加人员" CODE="SYNACCHRY" TYPE="va" LEN="1000" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="所外参加人员" CODE="SYNACCHRYW" TYPE="va" LEN="1000" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="会议需求" CODE="SYNACREQ" TYPE="va" LEN="200" Primary="false" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="申请时间" CODE="SYNACSQDATE" TYPE="datetime" LEN="0" Primary="false" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="密码" CODE="mt_meetingpassword" TYPE="va" LEN="50" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="备注" CODE="REMARK" TYPE="va" LEN="1000" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="参加领导" CODE="mt_joinleader" TYPE="va" LEN="2000" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="星期" CODE="week" TYPE="va" LEN="100" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="是否推送" CODE="isSend" TYPE="int" LEN="0" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="" FromName="会议管理" FromCode="mt_meeting" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="会议类型" CODE="HYLX" TYPE="va" LEN="50" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="印记(会议类型)" FromName="通用码表" FromCode="OrgGenerals" EditType="代码表" EditResourceName="xt.doc.会议类型" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="会议级别" CODE="HYJB" TYPE="va" LEN="50" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="印记(会议级别)" FromName="通用码表" FromCode="OrgGenerals" EditType="代码表" EditResourceName="xt.doc.会议级别" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="会议室" CODE="mt_roomid" TYPE="int" LEN="0" Primary="false" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="印记(会议室)" FromName="会议室" FromCode="mt_meetingroom" EditType="" EditResourceName="" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="主持部门" CODE="mt_meetingchair" TYPE="va" LEN="50" Primary="false" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="印记(主持部门)" FromName="组织结构" FromCode="BureauSet" EditType="维度树" EditResourceName="blog.组织机构" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="快捷时间" CODE="fastselectDatetime" TYPE="va" LEN="50" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="印记(快捷时间)" FromName="通用码表" FromCode="OrgGenerals" EditType="代码表" EditResourceName="meeting.fastselect" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="密级" CODE="SELEID" TYPE="va" LEN="50" Primary="false" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="印记(资料密级)" FromName="密级" FromCode="DM_SECRLEVEL" EditType="代码表" EditResourceName="crm.密级" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="参加单位" CODE="mt_joindepart" TYPE="va" LEN="50" Primary="false" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="印记(参加单位)" FromName="组织结构" FromCode="BureauSet" EditType="维度树" EditResourceName="blog.部门结构" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="会议状态" CODE="SYNACSTATE" TYPE="va" LEN="50" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="印记(会议状态)" FromName="通用码表" FromCode="OrgGenerals" EditType="代码表" EditResourceName="xt.doc.会议状态" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="上报状态" CODE="status" TYPE="int" LEN="0" Primary="false" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="印记(上报状态)" FromName="上报状态" FromCode="ReportStatus" EditType="代码表" EditResourceName="blog.上报状态" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="审批结果" CODE="approveRes" TYPE="va" LEN="50" Primary="false" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="印记(审批结果)" FromName="审批结果" FromCode="ApproveResult" EditType="代码表" EditResourceName="blog.审批结果" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="操作标志" CODE="Flag" TYPE="int" LEN="0" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="印记(操作标志)" FromName="操作标志" FromCode="ReportFlag" EditType="代码表" EditResourceName="blog.操作标志" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="数据删除标识" CODE="XTDELFLAG" TYPE="va" LEN="50" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="印记(数据删除标识)" FromName="通用码表" FromCode="OrgGenerals" EditType="代码表" EditResourceName="xt.数据删除标识" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="申请人" CODE="PERSON_SQ" TYPE="va" LEN="50" Primary="false" Mandatory="false" Null="true" Unique="false" Display="false" FromRelation="印记(申请人)" FromName="人员" FromCode="UserSet" EditType="代码表" EditResourceName="blog.人员" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
<Field NAME="密码类型" CODE="passwordType" TYPE="va" LEN="50" Primary="false" Mandatory="true" Null="false" Unique="false" Display="false" FromRelation="印记(密码类型)" FromName="通用码表" FromCode="OrgGenerals" EditType="代码表" EditResourceName="meeting.passwordtype" DisableInput="false" Units="" Index="" Actor="" Locale=""/>
</Fields>
</Table>
</Tables>

 

 

 

 
posted @ 2016-11-04 13:48  jdhdevelop  阅读(1036)  评论(0)    收藏  举报