安卓中xml的读取与生成

来源:互联网 发布:在线画画软件 编辑:程序博客网 时间:2024/05/17 06:03

文档背景:
安卓界面activity:
一个textview两个按钮
生成button和解析button

本文档主要通过实例将xml的读取和生成过程

详细“翻译”;

package com.example;

import android.os.Bundle;
import android.util.Xml;

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;

import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

private Button bt1;private Button bt2;private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    setView();    setListeners();}private void setView() {    // TODO Auto-generated method stub    bt1 = (Button) findViewById(R.id.button1);    bt2 = (Button) findViewById(R.id.button2);    tv= (TextView) findViewById(R.id.textView1);}private void setListeners() {    // TODO Auto-generated method stub    bt1.setOnClickListener(new OnClickListener() {        @Override        public void onClick(View v) {            // TODO Auto-generated method stub            jiexi();        }    });    bt2.setOnClickListener(new OnClickListener() {        @Override        public void onClick(View v) {            // TODO Auto-generated method stub            shengcheng();        }    });}protected void shengcheng() {//解析自定义的生成方法;此方法生成       // TODO Auto-generated method stub    try {           //try catch捕捉错误信息;        FileOutputStream out = //文件输出流out                 new FileOutputStream(                 "/sdcard/e.xml");//将文件输出流接入sd卡中的e.xml 文件上;准备向e输出数据;                XmlSerializer s = //序列化器 s,用来生成xml文件;                 Xml.newSerializer();                s.setOutput(out, "GBK");//序列化器s的输出端口接入out,输出指定的GBK格式的输出流;                s.startDocument("GBK", true); //序列化器头部公文标记格式为GBK,是独立文件;                s.startTag(null, "email")//序列化器输出开始标签,命名空间选择默认null;名字叫email;                 .attribute(null, "date", "2016-10-29")//的属性(命名空间为null,日期属性设置为2016-10-29)                 .attribute(null, "time", "16:5:12")//的属性(命名空间null,时间属性设置为16:5:12)                 .startTag(null, "from")//的开始标签(命名空间为null,标签内容是from)                 .text("aaa@aaa.com")//开始标签的文字内容是aaa@aaa.com                 .endTag(null, "from")//的结束标签(命名空间为null,标签内容是from                 )                 .startTag(null, "to")//开始标签....to                 .startTag(null, "to-email")//标签嵌套,表明to标签中的内容是以下几个“toemail”收件人标签                 .text("bbb@bbb.com")                 .endTag(null, "to-email")                 .startTag(null, "to-email")                 .text("ccc@ccc.com")                 .endTag(null, "to-email")                 .startTag(null, "to-email")                 .text("ddd@ddd.com")                 .endTag(null, "to-email")                 .endTag(null, "to")//承接上面的to开始标签,此时完成to标签;                 .startTag(null, "subject")//标题subject的开始标签                 .text("Hello Xml!")//此标签的内容是hello xml                 .endTag(null, "subject")//标题的结束尾标签                 .startTag(null, "body")//正文名为body的开始标签                 .text(">>>Hello Xml!<<<>>>Hello Xml!<<<>>>Hello Xml!<<<")//内容为。。。                 .endTag(null, "body")//body的结束                 .endTag(null, "email");//序列化器email的输出结束                s.flush();                out.close();        Toast.makeText(this, "生成成功", 0).show();    } catch (Exception e) {        // TODO: handle exception        Toast.makeText(this, "生成失败", 0).show();        e.printStackTrace();    }}protected void jiexi() {    // TODO Auto-generated method stub    try {        tv.setText("");//清空textview;        FileInputStream in=new FileInputStream("/sdcard/email.xml");//找到sd卡中的xml文件;        XmlPullParser p=Xml.newPullParser();//创建新的解析器p        p.setInput(in,"GBK");//设置读取xml数据输入流        int type;        while((type=p.next())!=XmlPullParser.END_DOCUMENT){//当p的next()不是数据流的end时!=1时;            if(type==XmlPullParser.START_TAG){//如果是数据解析流的开始标签时                String name=p.getName();// 获取标签的名字                if(name.equals("email")){//如果标签名等于email;                    String d=p.getAttributeValue(null, "date");//获得email的date属性值                    String t=p.getAttributeValue(null, "time");//获得email的time属性值                    tv.append("\nDate:"+d);//在tv里换行显示“date:“+d                    tv.append("\nTime:"+t);//在tv里换行显示“Time:”+t                }else if(name.equals("from")){//如果标签名是from;                    tv.append("\n发件人:"+p.nextText());//tv里换行显示:发件人+标签名向后跳一步所取得的文本;                }else if(name.equals("to-email")){//如果标签名=to-email                    tv.append("\n收件人:"+p.nextText());//tv换行显示收件人+标签名后的文本;                }else if(name.equals("subject")){//如果标签名=subject;                    tv.append("\n标题:"+p.nextText());//tv换行显示标题+标题标签名下的文本;                }else if(name.equals("body")){//如果标签名是body                    tv.append("\n内容:"+p.nextText()); //tv里换行显示内容标签下的文本;                }            }        }        in.close();        Toast.makeText(this, "解析完成", 0).show();    } catch (Exception e) {        // TODO: handle exception        Toast.makeText(this, "解析失败", 0).show();    }}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.main, menu);    return true;}

}

0 0
原创粉丝点击