博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 67 生成和解析xml
阅读量:6679 次
发布时间:2019-06-25

本文共 8040 字,大约阅读时间需要 26 分钟。

生成xml:

package com.itheima.createxml;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import com.itheima.createxml.domain.Message;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {    List
smsList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //虚拟10条短信 smsList = new ArrayList
(); for(int i = 0; i < 10; i++){ Message sms = new Message("小志好棒" + i, System.currentTimeMillis() + "", "138"+i+i, "1"); smsList.add(sms); } } public void click(View v){ //在内存中把xml备份短信的格式拼接出来,短信保存在外部,因为应用删除后要短信还在。 StringBuffer sb = new StringBuffer(); sb.append("
"); sb.append("
"); for (Message sms : smsList) {
//拼接每一条短信sms sb.append("
"); sb.append(""); sb.append(sms.getBody()); sb.append(""); sb.append("
"); sb.append(sms.getDate()); sb.append("
"); sb.append("
"); sb.append(sms.getType()); sb.append("
"); sb.append("
"); sb.append(sms.getAddress()); sb.append("
"); sb.append("
"); } sb.append("
"); File file = new File("sdcard/sms.xml"); try { FileOutputStream fos = new FileOutputStream(file); fos.write(sb.toString().getBytes()); fos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}

生成xml:

package com.itheima.xmlserializer;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlSerializer;import com.itheima.createxml.domain.Message;import android.os.Bundle;import android.app.Activity;import android.util.Xml;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {    List
smsList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 虚拟10条短信 smsList = new ArrayList
(); for (int i = 0; i < 10; i++) { Message sms = new Message("小志好棒" + i, System.currentTimeMillis() + "", "138" + i + i, "1"); smsList.add(sms); } } public void click(View v){ //使用xml序列化器生成xml文件 //1.拿到序列化器对象 XmlSerializer xs = Xml.newSerializer(); //2.初始化路径和文件名,生成在sd卡中, File file = new File("sdcard/sms2.xml"); try { FileOutputStream fos = new FileOutputStream(file); //enconding:指定用什么编码生成xml文件,安卓默认就是utf-8,所以几乎所有的编码都是utf-8, xs.setOutput(fos, "utf-8"); //utf-8指定头结点
中的enconding的值enconding="utf-8",true指定是否是独立的xml文件, xs.startDocument("utf-8", true); xs.startTag(null, "message");//开始节点的名字
,null为namespace, for (Message sms : smsList) { xs.startTag(null, "sms"); xs.startTag(null, "body"); xs.text(sms.getBody() + "");//text表示文本节点 xs.endTag(null, "body"); xs.startTag(null, "date"); xs.text(sms.getDate()); xs.endTag(null, "date"); xs.startTag(null, "type"); xs.text(sms.getType()); xs.endTag(null, "type"); xs.startTag(null, "address"); xs.text(sms.getAddress()); xs.endTag(null, "address"); xs.endTag(null, "sms"); } xs.endTag(null, "message");//结束节点 //告诉序列化器,文件生成完毕 xs.endDocument(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}

解析xml:

package com.itheima.pullparser;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import com.itheima.pullparser.domain.City;import android.os.Bundle;import android.app.Activity;import android.util.Xml;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {    List
cityList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ //获取到src文件夹下的资源文件 InputStream is = getClassLoader().getResourceAsStream("weather.xml");//获取资源作为流 //拿到pull解析器对象 XmlPullParser xp = Xml.newPullParser(); //初始化 try { xp.setInput(is, "gbk");//第一个是输入流,gbk是解析编码,gbk是windows的默认编码格式,所以weather.xml的编码格式是gbk //获取当前节点的事件类型,通过事件类型的判断,我们可以知道当前节点是什么节点,从而确定我们应该做什么操作 //解析是一行一行的解析的, int type = xp.getEventType(); City city = null; while(type != XmlPullParser.END_DOCUMENT){
//文档结束节点 //根据节点的类型,要做不同的操作 switch (type) { case XmlPullParser.START_TAG://开始节点 // 获取当前节点的名字 if("weather".equals(xp.getName())){ //创建city集合对象,用于存放city的javabean cityList = new ArrayList
(); } else if("city".equals(xp.getName())){ //创建city的javabean对象 city = new City(); } else if("name".equals(xp.getName())){ String name = xp.nextText();//获取当前节点的下一个节点的文本就是QQ,nextText并把指针移到当前节点的结束节点, city.setName(name); } else if("temp".equals(xp.getName())){ // 获取当前节点的下一个节点的文本 String temp = xp.nextText(); city.setTemp(temp); } else if("pm".equals(xp.getName())){ // 获取当前节点的下一个节点的文本 String pm = xp.nextText(); city.setPm(pm); } break; case XmlPullParser.END_TAG://结束节点,
QQ
遇到什么都不做,遇到QQ文本节点什么都不做, if("city".equals(xp.getName())){ //把city的javabean放入集合中 cityList.add(city); } break; } //把指针移动到下一个节点,并返回该节点的事件类型,前一个结束节点和后一个开始节点会有一个换行符,换行符是一个文本节点, type = xp.next(); } for (City c : cityList) { System.out.println(c.toString()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}/*
QQ
5
80
rr
-5
800
����
12��
60
*/

 

转载地址:http://ainao.baihongyu.com/

你可能感兴趣的文章
Spring事务5种属性
查看>>
css图片对齐排版思路
查看>>
如何将sql 2000数据库 移植到 mysql 数据库中
查看>>
视频播放的优化与切换测试记录
查看>>
LoadRunner脚本之EXTRARES参数
查看>>
我的友情链接
查看>>
linux下为什么删除了文件空间却不释放?
查看>>
shell脚本之循环语句
查看>>
感到自己自私和无力
查看>>
更改EMC-Powerpath软件的路径工作模式
查看>>
软件管理
查看>>
[ Talk is Cheap Show me the CODE ] : jQuery Mobile
查看>>
LVM——逻辑卷管理
查看>>
离线安装gcc(CentOS7)
查看>>
客运车辆监管及运营平台
查看>>
eclipse添加注释
查看>>
贝叶斯估计和最大后验估计
查看>>
COBBLER无人值守安装
查看>>
基础知识--JAVA注解ElementType
查看>>
kickstart部署centos6.2 x86_64
查看>>