生成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<Message> smsList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //虚拟10条短信
smsList = new ArrayList<Message>();
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("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>");
sb.append("<messages>");
for (Message sms : smsList) {//拼接每一条短信sms
sb.append("<sms>"); sb.append("<body>");
sb.append(sms.getBody());
sb.append("</body>"); sb.append("<date>");
sb.append(sms.getDate());
sb.append("</date>"); sb.append("<type>");
sb.append(sms.getType());
sb.append("</type>"); sb.append("<address>");
sb.append(sms.getAddress());
sb.append("</address>"); sb.append("</sms>");
}
sb.append("</messages>"); 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<Message> smsList; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 虚拟10条短信
smsList = new ArrayList<Message>();
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指定头结点<message>中的enconding的值enconding="utf-8",true指定是否是独立的xml文件,
xs.startDocument("utf-8", true); xs.startTag(null, "message");//开始节点的名字<message>,null为namespace, for (Message sms : smsList) {
xs.startTag(null, "sms"); xs.startTag(null, "body");
xs.text(sms.getBody() + "<body>");//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<City> 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<City>();
}
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://结束节点,<name>QQ</name>遇到</name>什么都不做,遇到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();
}
} }
/*
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<weather>
<city>
<name>QQ</name>
<temp>5</temp>
<pm>80</pm>
</city>
<city>
<name>rr</name>
<temp>-5</temp>
<pm>800</pm>
</city>
<city>
<name>����</name>
<temp>12��</temp>
<pm>60</pm>
</city>
</weather>*/

android 67 生成和解析xml的更多相关文章

  1. dom4j生成和解析xml文件

    dom4j生成和解析xml文件 要生成和解析如下格式的xml文件: <?xml version="1.0" encoding="UTF-8"?> & ...

  2. DOM4J生成、解析XML实例

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterato ...

  3. JDOM生成、解析XML实例

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...

  4. Android Json生成及解析实例

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

  5. Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

    XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...

  6. Android 使用pull,sax解析xml

    pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...

  7. Android之使用XMLPull解析xml(二)

    转自:http://www.blogjava.net/sxyx2008/archive/2010/08/04/327885.html 介绍下在Android中极力推荐的xmlpull方式解析xml.x ...

  8. java 生成和解析xml

    本文主要使用的是Jdom.jar包(包的下载百度一下)实现了生成xml文件和解析xml文件 下面是生成xml的实现 说明:stuLists集合是一个存放着Student对象的集合 import jav ...

  9. C#生成、解析xml文件以及处理报错原因

    转载自:http://blog.csdn.net/lilinoscar/article/details/21027319 简单的介绍一下生成XML文件以及解析,因为有些数据不一定放到数据库,减少链接数 ...

随机推荐

  1. iOS 一些struct类型的NSLog输出格式-b

    我们经常会输出一些坐标尺寸信息之类的,比如view的frame,是CGRect类型的,用frame.oringial.x 和frame.size.width来做NSLog参数好麻烦,还好苹果对这些常用 ...

  2. WordPress 使用 Pie-Register 添加前台注册、登录、找回密码和编辑个人资料功能

    转自:http://www.wpdaxue.com/front-end-publishing.html Pie-Register 是一个功能比较完善的 WordPress 才能,使用它可以很方便添加和 ...

  3. 【2011 Greater New York Regional 】Problem H: Maximum in the Cycle of 1

    也是一个数学题: 主要用到的是排列组合的知识,推推公式就行了,挺简单的: 唯一要注意的是A(0,0)=1: 在这个上面WA了几次,= = 代码: #include<stdio.h> #de ...

  4. Codeforces Round #197 (Div. 2) : E

    看了codeforces上的大神写的题解之后,才知道这道题水的根本! 不过相对前面两题来说,这道题的思维要难一点: 不过想到了水的根本,这题也真心不难: 方法嘛,就像剥洋葱一样,从外面往里面剥: 所以 ...

  5. QLGame 2d Engine SpriteBatch类创建

    GitHub地址:https://github.com/wsgzxl/QLGame2dEngine 今天说五个问题: 1.前面说到的 颜色不对的问题,是因为FreeImage读取出来的数据格式与Ope ...

  6. 李洪强漫谈iOS开发[C语言-026]-符合赋值表达式

  7. 测试用(编写优质嵌入式C程序)

    注:相比于Word,如果使用CSDN自带编辑器写出结构清晰的文档,需要花费更多的时间,所以我尝试将我写的一些word文档转换为图片发布,这样就可以保持原来的结构.字体,可以获得更好的可读性.图片的分辨 ...

  8. 解析Android开发优化之:对Bitmap的内存优化详解

    在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常.所以,对于图 ...

  9. linux 下 poll 编程

    poll 与 select 很类似,都是对描述符进行遍历,查看是否有描述符就绪.如果有就返回就绪文件描述符的个数将.poll 函数如下: #include <poll.h> int pol ...

  10. 代码演示C#中string和StingBuilder内存中的区别

    关于 string和StringBuilder的区别参考MSDN.本文用程序演示它们在内存中的区别,及其因此其行为不同. //Demo  string memory model namespace C ...