zoukankan      html  css  js  c++  java
  • 使用Pull解析器生成XML文件和读取xml文件

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

    一、布局界面

    1. <RelativeLayout xmlns: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.   
    11.     <Button  
    12.         android:id="@+id/btn_pull"  
    13.         android:layout_width="wrap_content"  
    14.         android:layout_height="wrap_content"  
    15.         android:layout_alignParentLeft="true"  
    16.         android:layout_alignParentRight="true"  
    17.         android:layout_alignParentTop="true"  
    18.         android:layout_marginTop="110dp"  
    19.         android:text="@string/btn_pull" />  
    20.   
    21.     <Button  
    22.         android:id="@+id/btn_write"  
    23.         android:layout_width="wrap_content"  
    24.         android:layout_height="wrap_content"  
    25.         android:layout_alignLeft="@+id/btn_pull"  
    26.         android:layout_alignRight="@+id/btn_pull"  
    27.         android:layout_below="@+id/btn_pull"  
    28.         android:layout_marginTop="61dp"  
    29.         android:text="@string/btn_write" />  
    30.   
    31. </RelativeLayout>  


    二、写一个xml文件

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <persons>  
    3.     <person id="23">  
    4.         <name>李明</name>  
    5.         <age>30</age>  
    6.     </person>  
    7.     <person id="20">  
    8.         <name>李向梅</name>  
    9.         <age>25</age>  
    10.     </person>  
    11. </persons>  


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

    1. package com.example.lession04_pull.domain;  
    2.   
    3. import java.io.Serializable;  
    4.   
    5. public class Person implements Serializable{  
    6.   
    7.     /** 
    8.      *  
    9.      */  
    10.     private static final long serialVersionUID = 1L;  
    11.     private int id;  
    12.     private String name;  
    13.     private short age;  
    14.     public int getId() {  
    15.         return id;  
    16.     }  
    17.     public void setId(int id) {  
    18.         this.id = id;  
    19.     }  
    20.     public String getName() {  
    21.         return name;  
    22.     }  
    23.     public void setName(String name) {  
    24.         this.name = name;  
    25.     }  
    26.     public short getAge() {  
    27.         return age;  
    28.     }  
    29.     public void setAge(short age) {  
    30.         this.age = age;  
    31.     }  
    32.     public Person(int id, String name, short age) {  
    33.         super();  
    34.         this.id = id;  
    35.         this.name = name;  
    36.         this.age = age;  
    37.     }  
    38.     public Person() {  
    39.         super();  
    40.         // TODO Auto-generated constructor stub  
    41.     }  
    42.       
    43.       
    44. }  


    四、写一个Pul的服务类

    1. package com.example.lession04_pull.service;  
    2.   
    3. import java.io.File;  
    4. import java.io.FileOutputStream;  
    5. import java.io.InputStream;  
    6. import java.util.ArrayList;  
    7. import java.util.List;  
    8.   
    9. import org.xmlpull.v1.XmlPullParser;  
    10. import org.xmlpull.v1.XmlSerializer;  
    11. import android.os.Environment;  
    12. import android.util.Xml;  
    13.   
    14. import com.example.lession04_pull.domain.Person;  
    15.   
    16. public class PullXmlService {  
    17.       
    18.     public Person currentPerson;  
    19.   
    20.     public List<Person> readXml(InputStream is){  
    21.         //声明返回值  
    22.         List<Person> persons=null;  
    23.         //首先利用Xml.newPullParser()获取解析对象  
    24.         XmlPullParser xmlPullParser=Xml.newPullParser();  
    25.         try{  
    26.             // 解析文件  
    27.             xmlPullParser.setInput(is, "UTF-8");  
    28.             //获取解析的事件类型  
    29.             int eventType=xmlPullParser.getEventType();  
    30.             //判断文件解析的是否完毕  
    31.             while(eventType!=XmlPullParser.END_DOCUMENT){  
    32.                 switch (eventType) {  
    33.                 case XmlPullParser.START_DOCUMENT:  
    34.                     persons=new ArrayList<Person>();  
    35.                     break;  
    36.   
    37.                 case XmlPullParser.START_TAG:  
    38.                     String tagName=xmlPullParser.getName();  
    39.                     if("person".equals(tagName)){  
    40.                         //创建person对象  
    41.                         currentPerson=new Person();  
    42.                         currentPerson.setId(Integer.parseInt(xmlPullParser  
    43.                                 .getAttributeValue(null, "id")));  
    44.                     }else if("name".equals(tagName)){  
    45.                         currentPerson.setName(xmlPullParser.nextText());  
    46.                     }else if("age".equals(tagName)){  
    47.                         currentPerson.setAge(new Short(xmlPullParser.nextText()));  
    48.                     }  
    49.                     break;  
    50.                 case XmlPullParser.END_TAG:  
    51.                     if("person".equals(xmlPullParser.getName()) && currentPerson!=null){  
    52.                         //把person对象放到集合中去  
    53.                         persons.add(currentPerson);  
    54.                         currentPerson=null;  
    55.                     }  
    56.                     break;  
    57.                 }  
    58.                 eventType=xmlPullParser.next();  
    59.             }  
    60.             is.close();  
    61.         }catch(Exception e){  
    62.             e.printStackTrace();  
    63.         }  
    64.         return persons;  
    65.     }  
    66.       
    67.       
    68.       
    69.     // 写入  
    70.         public boolean write(List<Person> persons) {  
    71.             // 采用pull解析进行实现  
    72.   
    73.             if (Environment.getExternalStorageState().equals(  
    74.                     Environment.MEDIA_MOUNTED)) {  
    75.   
    76.                 // 获取sdcard目录 文件对象  
    77.                 File sdCardDir = Environment.getExternalStorageDirectory();  
    78.                 // 创建文件  
    79.                 File file = new File(sdCardDir, "mycsdn.xml");  
    80.   
    81.                 XmlSerializer serializer = Xml.newSerializer();  
    82.   
    83.                 FileOutputStream fos = null;  
    84.                 try {  
    85.                     // 根据文件对象创建一个文件的输出流对象  
    86.                     fos = new FileOutputStream(file);  
    87.                     // 设置输出的流及编码  
    88.                     serializer.setOutput(fos, "UTF-8");  
    89.                     // 设置文件的开始  
    90.                     serializer.startDocument("UTF-8", true);  
    91.                     // persons标签开始  
    92.                     serializer.startTag(null, "persons");  
    93.                     for (Person person : persons) {  
    94.                         // person标签的开始  
    95.                         serializer.startTag(null, "person");  
    96.                         // 设置person标签的属性  
    97.                         serializer.attribute("null", "id", person.getId() + "");  
    98.   
    99.                         // 设置person标签的子标签 name  
    100.                         serializer.startTag(null, "name");  
    101.                         serializer.text(person.getName());  
    102.                         serializer.endTag(null, "name");  
    103.   
    104.                         // 设置person标签的子标签的age  
    105.                         serializer.startTag(null, "age");  
    106.                         serializer.text(person.getAge() + "");  
    107.                         serializer.endTag(null, "age");  
    108.   
    109.                         // person标签的结束  
    110.                         serializer.endTag(null, "person");  
    111.                     }  
    112.   
    113.                     // persons标签的结束  
    114.                     serializer.endTag(null, "persons");  
    115.                     // 文件的结束  
    116.                     serializer.endDocument();  
    117.   
    118.                     fos.flush();  
    119.                     fos.close();  
    120.                     return true;  
    121.                 } catch (Exception e) {  
    122.                     e.printStackTrace();  
    123.                 }  
    124.   
    125.             }  
    126.   
    127.             return false;  
    128.         }  
    129.   
    130. }  


    五、在MainActivity中调用测试

      1. package com.example.lession04_pull;  
      2.   
      3. import java.util.List;  
      4.   
      5. import com.example.lession04_pull.domain.Person;  
      6. import com.example.lession04_pull.service.PullXmlService;  
      7.   
      8. import android.os.Bundle;  
      9. import android.app.Activity;  
      10. import android.view.Menu;  
      11. import android.view.View;  
      12. import android.widget.Button;  
      13. import android.widget.Toast;  
      14.   
      15. public class MainActivity extends Activity {  
      16.   
      17.     public Button btn_pull,btn_write;  
      18.     public PullXmlService pullXmlService;  
      19.     @Override  
      20.     protected void onCreate(Bundle savedInstanceState) {  
      21.         super.onCreate(savedInstanceState);  
      22.         setContentView(R.layout.activity_main);  
      23.         //实例化  
      24.         pullXmlService=new PullXmlService();  
      25.           
      26.         btn_pull=(Button) findViewById(R.id.btn_pull);  
      27.         btn_write=(Button) findViewById(R.id.btn_write);  
      28.           
      29.         btn_pull.setOnClickListener(new MyOnClickListener());  
      30.         btn_write.setOnClickListener(new MyOnClickListener());  
      31.     }  
      32.   
      33.     @Override  
      34.     public boolean onCreateOptionsMenu(Menu menu) {  
      35.         // Inflate the menu; this adds items to the action bar if it is present.  
      36.         getMenuInflater().inflate(R.menu.main, menu);  
      37.         return true;  
      38.     }  
      39.       
      40.     class MyOnClickListener implements View.OnClickListener{  
      41.   
      42.         @Override  
      43.         public void onClick(View v) {  
      44.             int id=v.getId();  
      45.             switch (id) {  
      46.             case R.id.btn_pull:  
      47.                 List<Person> persons=null;  
      48.                 try{  
      49.                     persons=pullXmlService.readXml(getAssets().open("csdn.xml"));  
      50.                 }catch(Exception e){  
      51.                     e.printStackTrace();  
      52.                 }  
      53.                 if(persons!=null){  
      54.                     Toast.makeText(MainActivity.this, "采用pull解析xml文件"+persons.get(0).getName()+"--"+persons.get(1).getName(),  
      55.                             Toast.LENGTH_LONG).show();  
      56.                 }  
      57.                 break;  
      58.   
      59.             case R.id.btn_write:  
      60.                 try{  
      61.                     List<Person> pers=pullXmlService.readXml(getAssets().open("csdn.xml"));  
      62.                     //重新生成一个xml文件  mysdcare.xml  
      63.                     boolean flag=pullXmlService.write(pers);  
      64.                     if(flag){  
      65.                         Toast.makeText(MainActivity.this, "采用pull解析生产xml文件成功",  
      66.                                 Toast.LENGTH_LONG).show();  
      67.                     }else{  
      68.                         Toast.makeText(MainActivity.this, "采用pull解析生产xml文件失败",  
      69.                                 Toast.LENGTH_LONG).show();  
      70.                           
      71.                     }  
      72.                 }catch(Exception e){  
      73.                     e.printStackTrace();  
      74.                 }  
      75.                 break;  
      76.             }  
      77.               
      78.         }  
      79.           
      80.     }  
      81.   
      82. }  

    http://blog.csdn.net/xueshuangshuang123/article/details/9016161

  • 相关阅读:
    【转】Redis概念原理、redis面试
    mysql登录后显示用户名与当前数据库名
    (5.3.10)数据库迁移——sql server降级操作
    navicat下载安装破解
    sql server2016+windows server2016使用日志传送做主从,主库无法备份事务日志
    (4.41)sql server如何把xml转换成表格数据?
    .NET Core SDK在Windows系统安装后出现Failed to load the hostfxr.dll等问题的解决方法
    .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程
    .NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用
    [译]聊聊C#中的泛型的使用(新手勿入)
  • 原文地址:https://www.cnblogs.com/daishuguang/p/3893601.html
Copyright © 2011-2022 走看看