Android下使用pull解析器生成XML文件、读取XML文件

Android下使用Pull解析器
	1,Pull解析器的运行方式与SAX解析器相似。它提供了类似的事件,如:开始元素和结束元素事件。
	2,使用parser.next()可以进入下一个元素并触发相应事件。
	3,事件将作为一个int数值被发送,因此可以使用一个switch对相应的事件进行处理。
	4,当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。
	5,相关API:
		获得当前节点事件类型:parser.getEventType();
		获得下一节点事件类型:parser.next();
		获得标签属性值:	  parser.getAttributeValue();
		获得标签后面文本内容:parser.nextText();

	例子:
		<?xml version="1.0" encoding="UTF-8"?>
		<persons>
			<person id=“18">
				<name>allen</name>
				<age>36</age>
			</person>
			<person id=“28">
				<name>james</name>
				<age>25</age>
			</person>
		</persons>

	// 使用Pull解析器生成XML文件,并写到本地
	private void writeXmlToLocal() {
		List<Person> personList = getPersonList();

		// 获得序列化对象
		XmlSerializer serializer = Xml.newSerializer();
//		XmlSerializer serializer = XmlPullParserFactory.newInstance().newSerializer();

		try {
			File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");
			FileOutputStream fos = new FileOutputStream(path);

			// 指定序列化对象输出的位置和编码
			serializer.setOutput(fos, "utf-8");

						// 写开始 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
			serializer.startDocument("utf-8", true);		

			serializer.startTag(null, "persons");			// <persons>

			for (Person person : personList) {

				// 开始写person
				serializer.startTag(null, "person");		// <person>
				serializer.attribute(null, "id", String.valueOf(person.getId()));

				// 写person的name
				serializer.startTag(null, "name");			// <name>
				serializer.text(person.getName());
				serializer.endTag(null, "name");			// </name>

				// 写person的age
				serializer.startTag(null, "age");			// <age>
				serializer.text(String.valueOf(person.getAge()));
				serializer.endTag(null, "age");				// </age>

				serializer.endTag(null, "person");			// </person>
			}

			serializer.endTag(null, "persons");				// </persons>

			serializer.endDocument();						// 结束
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 使用Pull解析器读取本地的XML文件
	private List<Person> parserXmlFromLocal() {
		try {
			File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");
			FileInputStream fis = new FileInputStream(path);

			// 获得pull解析器对象
			XmlPullParser parser = Xml.newPullParser();
//			XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser(); 

			// 指定解析的文件和编码格式
			parser.setInput(fis, "utf-8");

			// 获得事件类型
			int eventType = parser.getEventType();

			List<Person> personList = null;
			Person person = null;
			String id;
			while(eventType != XmlPullParser.END_DOCUMENT) {

				// 获得当前节点的名称
				String tagName = parser.getName();

				switch (eventType) {
				case XmlPullParser.START_TAG: 				// 当前等于开始节点  <person>
					if("persons".equals(tagName)) {			// <persons>
						personList = new ArrayList<Person>();
					} else if("person".equals(tagName)) { 	// <person id="1">
						person = new Person();
						id = parser.getAttributeValue(null, "id");
						person.setId(Integer.valueOf(id));
					} else if("name".equals(tagName)) { 	// <name>
						person.setName(parser.nextText());
					} else if("age".equals(tagName)) { 		// <age>
						person.setAge(Integer.parseInt(parser.nextText()));
					}
					break;
				case XmlPullParser.END_TAG:		// </persons>
					if("person".equals(tagName)) {
						// 需要把上面设置好值的person对象添加到集合中
						personList.add(person);
					}
					break;
				default:
					break;
				}
				// 获得下一个事件类型
				eventType = parser.next();
			}
			return personList;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}
时间: 2024-12-07 17:23:41

Android下使用pull解析器生成XML文件、读取XML文件的相关文章

使用Pull解析器生成XML文件

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器. 1.使用Pull解析器生成一个与itcast.xml文件内容相同的myitcast.xml文件,代码在下方 public static String writeXML(List<Person> persons, Writer wri

使用Pull解析器生成XML文件和读取xml文件

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器. 一.布局界面 [html] view plaincopyprint? <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

pull解析器: 反序列化与序列化

pull解析器:反序列化 读取xml文件来获取一个对象的数据 1 import java.io.FileInputStream; 2 import java.io.IOException; 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import org.xmlpull.v1.XmlPullParser; 7 import org.xmlpull.v1.XmlPullParserException; 8 import or

无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

Android开发系列(八):采用Pull解析器解析和生成XML内容

因为有些时候,应用的数据是采用XML文件的格式存放的,所以我们需要知道怎么从XML文件中读取这些数据 在Android中可以通过SAX.DOM.pull解析XML文件. 在本篇博文中主要介绍采用Pull解析器解析和生成XML内容. 介绍:在Android已经集成了Pull解析器,所以无需添加任何的jar文件.在Android中本身用到的各种xml文件,其内部也是采用Pull解析器进行解析的. 一.采用Pull解析器解析XML文件内容 首先,我们需要先建立一个Android Project项目,名

Android 学习心得(1)——pull解析器

Android内核使用pull解析器  所以不用导入jar包,pull解析器简单.易用.接近于手工编写XML文件 解析的XML文件为xmlpull.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <students> 3 <student id="1"> 4 <name>张MM</name> 5 <gender>女</gen

安卓使用pull解析器解析XML文件

学习一下: 1 public class MainActivity extends Activity { 2 3 List<City> cityList; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 } 9 10 public void cli

Android Pull解析器解析XML文件和生成XML

PULL解析器方法如下: [注释] 读取到xml的声明返回 START_DOCUMENT: 结束返回 END_DOCUMENT : 开始标签返回 START_TAG: 结束标签返回 END_TAG: 文本返回 TEXT. 生成XML代码如下:

Android开发之使用PULL解析和生成XML

请尊重他人的劳动成果,转载请注明出处:Android开发之使用PULL解析和生成XML 一.使用PULL解析XML 1.PULL简介 我曾在<浅谈XMl解析的几种方式>一文中介绍了使用DOM方式,SAX方式,Jdom方式,以及dom4j的方式来解析XML.除了可以使用以上方式来解析XML文件外,也可以使用Android系统内置的Pull解析器来解析XML文件. Pull解析器的运行方式与SAX解析器相似.它提供了类似的事件,如开始元素和结束元素事件.使用parser.next()可以进入下一个