文档背景:
安卓界面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;
@Override
protected 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();
}
}
@Override
public 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;
}
}