您的位置:首页 > 移动开发 > Android开发

Android-->XmlPullParser

2014-01-15 17:59 423 查看
public static void save()
throws Exception {
//获取文件目录路径  一般是应用层目录路径。storage/emulated/0
String filename = Environment.getExternalStorageDirectory()+File.separator+"xx.xml";
File file = new File(filename);
//创建一个新文件。
file.createNewFile();
Log.e(TAG, filename);

FileOutputStream fos = new FileOutputStream(filename);

XmlSerializer serializer = Xml.newSerializer();
// 设置输出流设置编码
serializer.setOutput(fos, "UTF-8"); //
serializer.startDocument("UTF-8", true);//设置编码
serializer.startTag(null, "persons"); //android规定一个xml只能有一个根节点,这个 TAG就是一个根节点 。
int count = 0;
for(int x=0;x<10;x++)
{
/**
* 有开有关,一定要要求闭合,
* 1:获取XmlSerializer实例,然后设置文件输出流,编码等。
* 2: 设置Dcoument编码。第二个参数,是否是独立的根?应该是。。
*/
serializer.startTag(null,"person");//1
serializer.attribute(null, "id",String.valueOf(count) );//attribute设置属性,
serializer.startTag(null, "name"); //11
serializer.text("zhangsan"+String.valueOf(count));//设置TAG中间内容。
serializer.endTag(null, "name"); //11
serializer.startTag(null, "age");//12
serializer.text(String.valueOf(count));
serializer.endTag(null, "age");//12
serializer.endTag(null, "person");//1
count++;
}
serializer.endTag(null, "persons");
serializer.endDocument();
fos.flush();//刷新进文件
fos.close();//关闭流

}


上面是 XmlSerializer 制作xml的

package com.maitewang.internetdemo.demo;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import android.util.Xml;

public class XmlDemo {
public static List<Person> getPerson(InputStream is) throws Exception {
Person person = null;
List<Person> persons = null;
// 两种方法获取对象,其实哪种都一样..
// 第一种
XmlPullParser pullParser = Xml.newPullParser();
// 第二种 生成工厂 然后工厂获取.
XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();
XmlPullParser pullParser1 = xppf.newPullParser();
// 几种事件类型
// XmlPullParser.START_DOCUMENT(开始解析)
// XmlPUllParser.START_TAG(开始元素)
// XmlPullParser.TEXT(解析文本):
// XmlPullParser.END_TAG(结束元素);
// XmlPullParser.END_DOCUMENT(结束解析) 事件结束 每一种都与之对应.
// 解析中 元素又有属性.属性该怎么解析? 取出元素 文本.

// 2:设置要解析的流,编码
pullParser.setInput(is, "UTF-8");
// 3:获取编码事件
int event = pullParser.getEventType();
// 4:中间开始判断事件
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:
// 判断是否文档开头.
// 一般这个时候开始创建对象准备分解文档
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
// 开始进入元素了
// pullParser.getName();获取元素名字 也就是<person></person> 这个
if ("person".equals(pullParser.getName())) {

// 取出属性元素id为0的值,方法:pullParser.getAttributeValue(int index);
int id = new Integer(pullParser.getAttributeValue(0));
person = new Person();
person.setId(id);
}
if (person == null) {
if ("name".equals(pullParser.getName())) {
// 方法名称也出来了.pullParser.nextText();获取元素值
person.setName(pullParser.nextText());
}
if ("age".equals(pullParser.getName())) {
person.setAge(pullParser.nextText());
}
}
case XmlPullParser.END_TAG:
if ("person".equals(pullParser.getName())) {
persons.add(person);
person = null;
}
break;
}
// 方法名称也出来了,next开始读取下一条元素.
event = pullParser.next();

}

return persons;

}
}


XmlPullParser
1:实例华XmlPullParser对象,2种方式:

  1.1:Xml.newPullParser();

  1.2: 获取工厂,然后从工厂里面生产

    XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();

    XmlPullParser xpp = xppf.newPullParser();

 2:因为pull解析是根据事件来的,所以需要判断事件。

    // 几种事件类型
    // XmlPullParser.START_DOCUMENT(开始解析)
    // XmlPUllParser.START_TAG(开始元素)
    // XmlPullParser.TEXT(解析文本):
    // XmlPullParser.END_TAG(结束元素);
    // XmlPullParser.END_DOCUMENT(结束解析) 事件结束 每一种都与之对应.
 3:Method:

    pullParser.getName();获取元素名字

    取出属性元素id为0的值,方法:pullParser.getAttributeValue(int index); AttriBute 元素,根据这一系列操作。

    pullParser.nextText(); 获取元素内容。

    pullParser.next();读取下一条元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: