【背景】
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。
【Demo源码】
一、布局界面
- <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context=".MainActivity">
-
- <Button
- android:id="@+id/btn_pull"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentRight="true"
- android:layout_alignParentTop="true"
- android:layout_marginTop="110dp"
- android:text="@string/btn_pull"/>
- android:id="@+id/btn_write"
- android:layout_alignLeft="@+id/btn_pull"
- android:layout_alignRight="@+id/btn_pull"
- android:layout_below="@+id/btn_pull"
- android:layout_marginTop="61dp"
- android:text="@string/btn_write"/>
- </RelativeLayout>
二、写一个xml文件
- <?xmlversion="1.0"encoding="UTF-8"?>
- <persons>
- <personid="23">
- <name>李明</name>
- <age>30</age>
- </person>
- <personid="20">
- <name>李向梅</name>
- <age>25</age>
- </persons>
三、写一个和xml相对应的bean
- packagecom.example.lession04_pull.domain;
- importjava.io.Serializable;
- publicclassPersonimplementsSerializable{
-
-
-
-
- privatestaticfinallongserialVersionUID=1L;
- privateintid;
- privateStringname;
- privateshortage;
- publicintgetId(){
- returnid;
- }
- publicvoidsetId(intid){
- this.id=id;
- }
- publicStringgetName(){
- returnname;
- publicvoidsetName(Stringname){
- this.name=name;
- publicshortgetAge(){
- returnage;
- publicvoidsetAge(shortage){
- this.age=age;
- publicPerson(intid,Stringname,shortage){
- super();
- this.name=name;
- publicPerson(){
-
-
- }
四、写一个Pul的服务类
- packagecom.example.lession04_pull.service;
- importjava.io.File;
- importjava.io.FileOutputStream;
- importjava.io.InputStream;
- importjava.util.ArrayList;
- importjava.util.List;
- importorg.xmlpull.v1.XmlPullParser;
- importorg.xmlpull.v1.XmlSerializer;
- importandroid.os.Environment;
- importandroid.util.Xml;
- importcom.example.lession04_pull.domain.Person;
- publicclassPullXmlService{
- publicPersoncurrentPerson;
- publicList<Person>readXml(InputStreamis){
-
- List<Person>persons=null;
-
- XmlPullParserxmlPullParser=Xml.newPullParser();
- try{
-
- xmlPullParser.setInput(is,"UTF-8");
-
- inteventType=xmlPullParser.getEventType();
-
- while(eventType!=XmlPullParser.END_DOCUMENT){
- switch(eventType){
- caseXmlPullParser.START_DOCUMENT:
- persons=newArrayList<Person>();
- break;
- caseXmlPullParser.START_TAG:
- StringtagName=xmlPullParser.getName();
- if("person".equals(tagName)){
-
- currentPerson=newPerson();
- currentPerson.setId(Integer.parseInt(xmlPullParser
- .getAttributeValue(null,"id")));
- }elseif("name".equals(tagName)){
- currentPerson.setName(xmlPullParser.nextText());
- }elseif("age".equals(tagName)){
- currentPerson.setAge(newShort(xmlPullParser.nextText()));
- caseXmlPullParser.END_TAG:
- if("person".equals(xmlPullParser.getName())&¤tPerson!=null){
-
- persons.add(currentPerson);
- currentPerson=null;
- break;
- eventType=xmlPullParser.next();
- is.close();
- }catch(Exceptione){
- e.printStackTrace();
- returnpersons;
-
- publicbooleanwrite(List<Person>persons){
-
- if(Environment.getExternalStorageState().equals(
- Environment.MEDIA_MOUNTED)){
-
- FilesdCardDir=Environment.getExternalStorageDirectory();
-
- Filefile=newFile(sdCardDir,"mycsdn.xml");
- XmlSerializerserializer=Xml.newSerializer();
- FileOutputStreamfos=null;
- try{
-
- fos=newFileOutputStream(file);
-
- serializer.setOutput(fos,"UTF-8");
-
- serializer.startDocument("UTF-8",true);
-
- serializer.startTag(null,"persons");
- for(Personperson:persons){
-
- "person");
-
- serializer.attribute("null","id",person.getId()+"");
-
- "name");
- serializer.text(person.getName());
- serializer.endTag(null,153); list-style:decimal-leading-zero outside; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important">
- "age");
- serializer.text(person.getAge()+"");
-
- "person");
-
-
- serializer.endDocument();
- fos.flush();
- fos.close();
- returntrue;
- returnfalse;
- }
五、在MainActivity中调用测试
- packagecom.example.lession04_pull;
- importjava.util.List;
- importcom.example.lession04_pull.domain.Person;
- importcom.example.lession04_pull.service.PullXmlService;
- importandroid.os.Bundle;
- importandroid.app.Activity;
- importandroid.view.Menu;
- importandroid.view.View;
- importandroid.widget.Button;
- importandroid.widget.Toast;
- publicclassMainActivityextendsActivity{
- publicButtonbtn_pull,btn_write;
- publicPullXmlServicepullXmlService;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- pullXmlService=newPullXmlService();
- btn_pull=(Button)findViewById(R.id.btn_pull);
- btn_write=(Button)findViewById(R.id.btn_write);
- btn_pull.setOnClickListener(newMyOnClickListener());
- btn_write.setOnClickListener(newMyOnClickListener());
- publicbooleanonCreateOptionsMenu(Menumenu){
-
- getMenuInflater().inflate(R.menu.main,menu);
- returntrue;
- classMyOnClickListenerimplementsView.OnClickListener{
- @Override
- publicvoidonClick(Viewv){
- intid=v.getId();
- switch(id){
- caseR.id.btn_pull:
- List<Person>persons=null;
- persons=pullXmlService.readXml(getAssets().open("csdn.xml"));
- }catch(Exceptione){
- e.printStackTrace();
- if(persons!=null){
- Toast.makeText(MainActivity.this,"采用pull解析xml文件"+persons.get(0).getName()+"--"+persons.get(1).getName(),
- Toast.LENGTH_LONG).show();
- caseR.id.btn_write:
- List<Person>pers=pullXmlService.readXml(getAssets().open("csdn.xml"));
-
- booleanflag=pullXmlService.write(pers);
- if(flag){
- "采用pull解析生产xml文件成功",
- Toast.LENGTH_LONG).show();
- }else{
- "采用pull解析生产xml文件失败",153); list-style:decimal-leading-zero outside; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|