pull解析与生成xml文件

大家晚上好,今天给大家讲解的是pull解析与生成xml文件,这主要有两个效果,其一,将完整格式的xml解析,在listView列表显示,这个知识点就要运用上几讲关于适配器知识点来做,其二,自己定义标准格式的xml文件,生成并发放在内部储存中。


由于这次的代码比较多,我主要讲解关键的代码,其他布局什么的,就不讲,有不懂可以是底下问我。

1.PullActivity.java

private ListView bookList;
private List<Map<String,Object>> data;
private Context context;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pull);

bookList = (ListView) findViewById(R.id.list);
context = this;

try {
//用输入流获取asset下的xml文件
InputStream is = getAssets().open("book.xml");
//调用业务层方法,方法的结果存在List的data值里
data = fileManager.parse(is);

//创建简单型适配器,参数一:上下文,参数二:要存的数据 参数三:layout布局 ,参数四:从哪里来,key值 ,参数五:到哪里去,布局对应的Id
SimpleAdapter adapter = new SimpleAdapter(this,data,
R.layout.item_list,new String[] { "name","price" },
new int[] { R.id.name_et,R.id.price_et });
//设置适配器,展示数据
bookList.setAdapter(adapter);

} catch (Exception e) {
e.printStackTrace();
}

}

/**
*用按钮点击事件,导入xml文件到指定的文件夹
*/
public void export(View v) {
try {
//获取导入的路径,getFilesDir()
File rootPath = context.getFilesDir();
//创建文件,参数一:路径 ,参数二:xml命名
File file = new File(rootPath,"new2.xml");
//输出流写入数据
FileOutputStream fos = new FileOutputStream(file);
Toast.makeText(context,"导入成功",Toast.LENGTH_SHORT).show();

//调用业务层的方法,传的参数是,data,fos,
fileManager.export(data,fos);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

2.fileManager.java 业务层,主要书写方法

//定义声明

private static final String BOOK = "book";
private static final String BOOKS = "books";
private static final String NAME = "name";
private static final String ID = "id";
private static final String PRICE = "price";

public static List<Map<String,Object>> parse(InputStream is)
throws Exception {

List<Map<String,Object>> data = null;
HashMap<String,Object> map = null;

//创建解析器
XmlPullParser parser = Xml.newPullParser();
//设置编码方式
parser.setInput(is,"utf-8");
//获取xml类型
int eventType = parser.getEventType();
//当条件满足时,开始执行循环
while (eventType != XmlPullParser.END_DOCUMENT) {

//switch case 判断

switch (eventType) {
//开始文档
case XmlPullParser.START_DOCUMENT:
//初始化保存的列表
data = new ArrayList<Map<String,Object>>();

break;
//开始标签
case XmlPullParser.START_TAG:
//得到开始标签下的属性值
String name = parser.getName();

//逐一开始判断,

//属性值的BOOK时
if (name.equals(BOOK)) {
map = new HashMap<String,Object>();
//得到id值
String id = parser.getAttributeValue(0);
map.put(ID,Integer.valueOf(id));

//属性值Name时
} else if (name.equals(NAME)) {

map.put(NAME,parser.nextText());

//属性值为PRICE时
} else if (name.equals(PRICE)) {
map.put(PRICE,parser.nextText());
}

break;
//结束标签
case XmlPullParser.END_TAG:
if (parser.getName().equals(BOOK)) {

//添加到列表中
data.add(map);
}

break;

default:
break;
}

//最关键的地方,每次都要在往下执行一次
eventType = parser.next();
}

返回已有数据的data值

return data;

}

/**
*导入文件方法
*/

public static void export(List<Map<String,Object>> data,
FileOutputStream fos) throws Exception {
//创建序号器,它有个特点,有了开始,必定有结束
XmlSerializer serializer = Xml.newSerializer();
//输出流的格式
serializer.setOutput(fos,"utf-8");
//开始文档
serializer.startDocument("utf-8",true);
//开始标签,开始的标签的命名为BOOKS
serializer.startTag(null,BOOKS);

//用map集合进行data遍历
for (Map map : data) {
//下一个开始标签BOOK
serializer.startTag(null,BOOK);
//设置属性ID,用map得到id的实际值
serializer.attribute(null,ID,map.get(ID).toString());
//下一个开始标签,NAME
serializer.startTag(null,NAME);
//设置文本值
serializer.text(map.get(NAME).toString());
serializer.endTag(null,NAME);

//设置下一个开始标签PRICE
serializer.startTag(null,PRICE);
//设置PRICE值
serializer.text(map.get(PRICE).toString());

//结束标签
serializer.endTag(null,PRICE);

serializer.endTag(null,BOOK);
}
//结束标签有头也有尾
serializer.endDocument();
serializer.endTag(null,BOOKS);
//关闭输出流
fos.close();


}



pull解析与生成就到这里,为什么要详细讲解这个解析呢,因为在我们做开发的时候,解析与生成xml最常用的方法就是pull,大家好好看看这篇博客,相信能给大家以后开发项目有用。时间过得很快,凌晨十二点多了,该洗洗睡,熬夜伤身,养好身体才有精力敲代码。晚安。



版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇