用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>



浙公网安备 33010602011771号