使用Pull解析器生成XML文件和读取xml文件

前端之家收集整理的这篇文章主要介绍了使用Pull解析器生成XML文件和读取xml文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

【背景】

有些时候,我们需要生成一个XML文件生成XML文件方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。

【Demo源码】

一、布局界面

  1. <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  2. @H_502_52@ xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. @H_502_52@ android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. @H_502_52@ android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. @H_502_52@ android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity">
  10. @H_502_52@
  11. <Button
  12. @H_502_52@ android:id="@+id/btn_pull"
  13. android:layout_width="wrap_content"
  14. @H_502_52@ android:layout_height="wrap_content"
  15. android:layout_alignParentLeft="true"
  16. @H_502_52@ android:layout_alignParentRight="true"
  17. android:layout_alignParentTop="true"
  18. @H_502_52@ android:layout_marginTop="110dp"
  19. android:text="@string/btn_pull"/>
  20. @H_502_52@ android:id="@+id/btn_write"
  21. android:layout_alignLeft="@+id/btn_pull"
  22. @H_502_52@ android:layout_alignRight="@+id/btn_pull"
  23. android:layout_below="@+id/btn_pull"
  24. @H_502_52@ android:layout_marginTop="61dp"
  25. android:text="@string/btn_write"/>
  26. @H_502_52@ </RelativeLayout> @H_495_404@


二、写一个xml文件

[html]
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. @H_502_52@ <persons>
  3. <personid="23">
  4. @H_502_52@ <name>李明</name>
  5. <age>30</age>
  6. @H_502_52@ </person>
  7. <personid="20">
  8. @H_502_52@ <name>李向梅</name>
  9. <age>25</age>
  10. @H_502_52@ </persons> @H_495_404@


三、写一个和xml相对应的bean

  1. packagecom.example.lession04_pull.domain;
  2. importjava.io.Serializable;
  3. publicclassPersonimplementsSerializable{
  4. @H_502_52@
  5. /**
  6. @H_502_52@ *
  7. */
  8. @H_502_52@ privatestaticfinallongserialVersionUID=1L;
  9. privateintid;
  10. @H_502_52@ privateStringname;
  11. privateshortage;
  12. @H_502_52@ publicintgetId(){
  13. returnid;
  14. @H_502_52@ }
  15. publicvoidsetId(intid){
  16. @H_502_52@ this.id=id;
  17. }
  18. @H_502_52@ publicStringgetName(){
  19. returnname;
  20. @H_502_52@ publicvoidsetName(Stringname){ @H_502_52@ this.name=name;
  21. publicshortgetAge(){
  22. returnage;
  23. @H_502_52@ publicvoidsetAge(shortage){ @H_502_52@ this.age=age;
  24. publicPerson(intid,Stringname,shortage){
  25. super();
  26. @H_502_52@ this.name=name; @H_502_52@ publicPerson(){
  27. //TODOAuto-generatedconstructorstub
  28. @H_502_52@ } @H_495_404@

四、写一个Pul的服务类


  1. packagecom.example.lession04_pull.service;
  2. importjava.io.File;
  3. @H_502_52@ importjava.io.FileOutputStream;
  4. importjava.io.InputStream;
  5. @H_502_52@ importjava.util.ArrayList;
  6. importjava.util.List;
  7. importorg.xmlpull.v1.XmlPullParser;
  8. @H_502_52@ importorg.xmlpull.v1.XmlSerializer;
  9. importandroid.os.Environment;
  10. @H_502_52@ importandroid.util.Xml;
  11. importcom.example.lession04_pull.domain.Person;
  12. publicclassPullXmlService{
  13. publicPersoncurrentPerson;
  14. publicList<Person>readXml(InputStreamis){
  15. //声明返回值
  16. @H_502_52@ List<Person>persons=null;
  17. //首先利用Xml.newPullParser()获取解析对象
  18. @H_502_52@ XmlPullParserxmlPullParser=Xml.newPullParser();
  19. try{
  20. @H_502_52@ //解析文件
  21. xmlPullParser.setInput(is,"UTF-8");
  22. @H_502_52@ //获取解析的事件类型
  23. inteventType=xmlPullParser.getEventType();
  24. @H_502_52@ //判断文件解析的是否完毕
  25. while(eventType!=XmlPullParser.END_DOCUMENT){
  26. @H_502_52@ switch(eventType){
  27. caseXmlPullParser.START_DOCUMENT:
  28. @H_502_52@ persons=newArrayList<Person>();
  29. break;
  30. @H_502_52@ caseXmlPullParser.START_TAG: @H_502_52@ StringtagName=xmlPullParser.getName();
  31. if("person".equals(tagName)){
  32. @H_502_52@ //创建person对象
  33. currentPerson=newPerson();
  34. @H_502_52@ currentPerson.setId(Integer.parseInt(xmlPullParser
  35. .getAttributeValue(null,"id")));
  36. @H_502_52@ }elseif("name".equals(tagName)){
  37. currentPerson.setName(xmlPullParser.nextText());
  38. @H_502_52@ }elseif("age".equals(tagName)){
  39. currentPerson.setAge(newShort(xmlPullParser.nextText()));
  40. @H_502_52@ caseXmlPullParser.END_TAG:
  41. if("person".equals(xmlPullParser.getName())&&currentPerson!=null){
  42. @H_502_52@ //把person对象放到集合中去
  43. persons.add(currentPerson);
  44. @H_502_52@ currentPerson=null;
  45. break;
  46. eventType=xmlPullParser.next();
  47. is.close();
  48. }catch(Exceptione){
  49. @H_502_52@ e.printStackTrace();
  50. returnpersons;
  51. //写入
  52. @H_502_52@ publicbooleanwrite(List<Person>persons){
  53. //采用pull解析进行实现
  54. @H_502_52@ if(Environment.getExternalStorageState().equals( @H_502_52@ Environment.MEDIA_MOUNTED)){
  55. //获取sdcard目录文件对象
  56. FilesdCardDir=Environment.getExternalStorageDirectory();
  57. @H_502_52@ //创建文件
  58. Filefile=newFile(sdCardDir,"mycsdn.xml");
  59. @H_502_52@ XmlSerializerserializer=Xml.newSerializer(); @H_502_52@ FileOutputStreamfos=null; @H_502_52@ try{
  60. //根据文件对象创建一个文件输出流对象
  61. @H_502_52@ fos=newFileOutputStream(file);
  62. //设置输出的流及编码
  63. @H_502_52@ serializer.setOutput(fos,"UTF-8");
  64. //设置文件的开始
  65. @H_502_52@ serializer.startDocument("UTF-8",true);
  66. //persons标签开始
  67. @H_502_52@ serializer.startTag(null,"persons");
  68. for(Personperson:persons){
  69. @H_502_52@ //person标签的开始
  70. "person");
  71. @H_502_52@ //设置person标签属性
  72. serializer.attribute("null","id",person.getId()+"");
  73. @H_502_52@ //设置person标签的子标签name
  74. "name");
  75. serializer.text(person.getName());
  76. @H_502_52@ serializer.endTag(null,153); list-style:decimal-leading-zero outside; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> //设置person标签的子标签的age
  77. "age");
  78. @H_502_52@ serializer.text(person.getAge()+"");
  79. //person标签的结束
  80. "person");
  81. //persons标签的结束
  82. @H_502_52@ //文件的结束 @H_502_52@ serializer.endDocument();
  83. fos.flush();
  84. fos.close();
  85. @H_502_52@ returntrue;
  86. returnfalse;
  87. @H_502_52@ } @H_495_404@


五、在MainActivity中调用测试

  1. packagecom.example.lession04_pull;
  2. @H_502_52@ importjava.util.List; @H_502_52@ importcom.example.lession04_pull.domain.Person; @H_502_52@ importcom.example.lession04_pull.service.PullXmlService;
  3. importandroid.os.Bundle;
  4. importandroid.app.Activity;
  5. @H_502_52@ importandroid.view.Menu;
  6. importandroid.view.View;
  7. @H_502_52@ importandroid.widget.Button;
  8. importandroid.widget.Toast;
  9. @H_502_52@ publicclassMainActivityextendsActivity{ @H_502_52@ publicButtonbtn_pull,btn_write; @H_502_52@ publicPullXmlServicepullXmlService;
  10. @Override
  11. @H_502_52@ protectedvoidonCreate(BundlesavedInstanceState){
  12. super.onCreate(savedInstanceState);
  13. @H_502_52@ setContentView(R.layout.activity_main);
  14. //实例化
  15. @H_502_52@ pullXmlService=newPullXmlService();
  16. btn_pull=(Button)findViewById(R.id.btn_pull);
  17. btn_write=(Button)findViewById(R.id.btn_write);
  18. @H_502_52@ btn_pull.setOnClickListener(newMyOnClickListener()); @H_502_52@ btn_write.setOnClickListener(newMyOnClickListener());
  19. publicbooleanonCreateOptionsMenu(Menumenu){
  20. //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
  21. @H_502_52@ getMenuInflater().inflate(R.menu.main,menu);
  22. returntrue;
  23. @H_502_52@ classMyOnClickListenerimplementsView.OnClickListener{
  24. @Override
  25. publicvoidonClick(Viewv){
  26. @H_502_52@ intid=v.getId();
  27. switch(id){
  28. @H_502_52@ caseR.id.btn_pull:
  29. List<Person>persons=null;
  30. @H_502_52@ persons=pullXmlService.readXml(getAssets().open("csdn.xml")); @H_502_52@ }catch(Exceptione){
  31. e.printStackTrace();
  32. @H_502_52@ if(persons!=null){ @H_502_52@ Toast.makeText(MainActivity.this,"采用pull解析xml文件"+persons.get(0).getName()+"--"+persons.get(1).getName(),
  33. Toast.LENGTH_LONG).show();
  34. @H_502_52@ caseR.id.btn_write: @H_502_52@ List<Person>pers=pullXmlService.readXml(getAssets().open("csdn.xml")); @H_502_52@ //重新生成一个xml文件mysdcare.xml
  35. booleanflag=pullXmlService.write(pers);
  36. @H_502_52@ if(flag){
  37. "采用pull解析生产xml文件成功",
  38. @H_502_52@ Toast.LENGTH_LONG).show();
  39. }else{
  40. "采用pull解析生产xml文件失败",153); list-style:decimal-leading-zero outside; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> }
  41. @H_495_404@ 原文链接:https://www.f2er.com/xml/296518.html

    猜你在找的XML相关文章