XmlSerializer serializer = Xml.newSerializer();
try {
serializer.setOutput(writer);
serializer.startDocument("UTF-8",true);
//第一个参数为命名空间,如果不使用命名空间,可以设置为null
serializer.startTag("","persons");
for (Person person : persons){
serializer.startTag("","person");
serializer.attribute("","id",person.getId().toString());
serializer.startTag("","name");
serializer.text(person.getName());
serializer.endTag("","name");
serializer.startTag("","age");
serializer.text(person.getAge().toString());
serializer.endTag("","age");
serializer.endTag("","person");
}
serializer.endTag("","persons");
serializer.endDocument();
return writer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return nul;
}
示例代码:
package fu.dao.li.test.dao;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
import android.os.Environment;
import android.util.Xml;
import fu.dao.li.test.domain.Sms;
public class XmlFile {
//自定义将数据以xml文件的形式写到sd卡中
public static boolean fileXml(List<Sms> list){
StringBuilder sb=new StringBuilder();
sb.append("<?xml version="1.0" encoding="utf-8"?>");
sb.append("<Smss>");
for(Sms s:list){
sb.append("<sms>");
sb.append("<id>").append(s.getId()).append("</id>");
sb.append("<data>").append(s.getData()).append("</data>");
sb.append("<time>").append(s.getTime()).append("</time>");
sb.append("<name>").append(s.getName()).append("</name>");
sb.append("</sms>");
}
sb.append("</Smss>");
try {
File file=new File(Environment.getExternalStorageDirectory(),"sms.xml");
System.out.println(file);
OutputStream out=new FileOutputStream(file);
out.write(sb.toString().getBytes());
out.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
//Xml文件序列化
public static boolean SerialzalXml(List<Sms> list){
//创建一个xml文件的序列化
XmlSerializer serializer=Xml.newSerializer();
//创建一个文件
File file=new File(Environment.getExternalStorageDirectory(),"sms2.xml");
try {
OutputStream out=new FileOutputStream(file);
//初始化序列化器以什么编码写出数据
serializer.setOutput(out,"utf-8");
//设置xml文件以什么编码解析
serializer.startDocument("utf-8",true);
//设置xml文件开头标签
serializer.startTag(null,"smss");
for(Sms s:list){
serializer.startTag(null,"id");
serializer.text(s.getId()+"");
serializer.endTag(null,"id");
serializer.startTag(null,"data");
serializer.text(s.getData());
serializer.endTag(null,"data");
serializer.startTag(null,"time");
serializer.text(s.getTime());
serializer.endTag(null,"time");
serializer.startTag(null,"name");
serializer.text(s.getName());
serializer.endTag(null,"name");
}
serializer.endTag(null,"smss");
serializer.endDocument();
out.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
//解析Xml文件
public static List<Sms> PullXml() throws Exception{
File file=new File(Environment.getExternalStorageDirectory(),"sms.xml");
InputStream in=new FileInputStream(file);
//创建一个xmlpull解析器
XmlPullParser parser=Xml.newPullParser();
//设置xml解析器的解码格式
parser.setInput(in,"utf-8");
Sms s=null;
//创建一个集合存储解析到的数据
List<Sms> list=null;
//获取解析到的节点类型,pull解析将解析到的不同节点类型用不同的int数据来表示,如文档开始标签用1来表示
int type=parser.getEventType();
//遍历xml,如果解析到的标签类型不是xml结束标志则继续
while(type!=XmlPullParser.END_DOCUMENT){
switch(type){
//判断是否是开始标签
case XmlPullParser.START_TAG:
if("Smss".equals(parser.getName())){
list=new ArrayList<Sms>();
}else if("sms".equals(parser.getName())){
s=new Sms();
}else if("id".equals(parser.getName())){
//获取下一个节点的文本数据,如果没有文本数据则返回null
int id=Integer.parseInt(parser.nextText());
//返回当前节点的文本,(在xml文件中空白区域也被当成文本数据)
//System.out.println("-----"+parser.getText());
s.setId(id);
}else if("data".equals(parser.getName())){
String data=parser.nextText();
s.setData(data);
}else if("time".equals(parser.getName())){
String time=parser.nextText();
s.setTime(time);
}else if("name".equals(parser.getName())){
String name=parser.nextText();
s.setName(name);
}
break;
//判断是否是结束标签
case XmlPullParser.END_TAG:
if("sms".equals(parser.getName())){
list.add(s);
s=null;
}
break;
}
//在解析中这句很重要,返回解析到的下一个节点类型
type=parser.next();
}
return list;
}
}