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

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

【背景】

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

【Demo源码】

一、布局界面

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


二、写一个xml文件

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


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

  1. packagecom.example.lession04_pull.domain;
  2. importjava.io.Serializable;
  3. publicclassPersonimplementsSerializable{

  4. /**
  5. *
  6. */
  7. privatestaticfinallongserialVersionUID=1L;
  8. privateintid;
  9. privateStringname;
  10. privateshortage;
  11. publicintgetId(){
  12. returnid;
  13. }
  14. publicvoidsetId(intid){
  15. this.id=id;
  16. }
  17. publicStringgetName(){
  18. returnname;
  19. publicvoidsetName(Stringname){
  20. this.name=name;
  21. publicshortgetAge(){
  22. returnage;
  23. publicvoidsetAge(shortage){
  24. this.age=age;
  25. publicPerson(intid,Stringname,shortage){
  26. super();
  27. this.name=name;
  28. publicPerson(){
  29. //TODOAuto-generatedconstructorstub
  30. }
  31. @H_143_404@

四、写一个Pul的服务类


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


五、在MainActivity中调用测试

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

    猜你在找的XML相关文章