展会信息港展会大全

用pull解析和生成xml
来源:互联网   发布日期:2016-01-13 21:57:25   浏览:1274次  

导读:pull解析也是事件驱动的,android中已经加入jar包,java使用时可以到官网加入jar包。//xml文件?xml version=1.0 encoding=UTF-8? persons person id=23 nameliming/name&g...

pull解析也是事件驱动的,android中已经加入jar包,java使用时可以到官网加入jar包。

//xml文件

<?xml version="1.0" encoding="UTF-8"?>

<persons>

<person id="23">

<name>liming</name>

<age>30</age>

</person>

<person id="20">

<name>lixiangmei</name>

<age>25</age>

</person>

</persons>

import java.io.InputStream;

import java.io.OutputStream;

import java.io.Writer;

import java.util.ArrayList;

import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

import cn.itcast.domain.Person;

public class PULLPersonService {

/** pull生成XML文件 **/

public static void save(List<Person> persons, Writer writer)

throws Throwable {

XmlSerializer serializer = Xml.newSerializer();

serializer.setOutput(writer);

serializer.startDocument("UTF-8", true);

serializer.startTag(null, "persons");

for (Person person : persons) {

serializer.startTag(null, "person");

serializer.attribute(null, "id", person.getId().toString());

serializer.startTag(null, "name");

serializer.text(person.getName());

serializer.endTag(null, "name");

serializer.startTag(null, "age");

serializer.text(person.getAge().toString());

serializer.endTag(null, "age");

serializer.endTag(null, "person");

}

serializer.endTag(null, "persons");

serializer.endDocument();

writer.flush();

writer.close();

}

/** pull解析XML文件 **/

public static List<Person> getPersons(InputStream inStream)

throws Throwable {

List<Person> persons = null;

Person person = null;

XmlPullParser parser = Xml.newPullParser();

parser.setInput(inStream, "UTF-8");

int eventType = parser.getEventType();// 产生第一个事件

while (eventType != XmlPullParser.END_DOCUMENT) {// 只要不是文档结束事件

switch (eventType) {

case XmlPullParser.START_DOCUMENT:

persons = new ArrayList<Person>();

break;

case XmlPullParser.START_TAG:

String name = parser.getName();// 获取解析器当前指向的元素的名称

if ("person".equals(name)) {

person = new Person();

person.setId(new Integer(parser.getAttributeValue(0)));

}

if (person != null) {

if ("name".equals(name)) {

person.setName(parser.nextText());// 获取解析器当前指向元素的下一个文本节点的值

}

if ("age".equals(name)) {

person.setAge(new Short(parser.nextText()));

}

}

break;

case XmlPullParser.END_TAG:

if ("person".equals(parser.getName())) {

persons.add(person);

person = null;

}

break;

}

eventType = parser.next();

}

return persons;

}

}

与sax不同的是pull只要对先获得一个事件类型然后用switch判断只要判断Tag,并用nextText获得文本,用parser.next();循环。

赞助本站

人工智能实验室

相关热词: pull 解析 生成 xml

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港