04 pull生成XML

package com.example.lession04_pull.service;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import android.os.Environment;
import android.util.Xml;

import com.example.lession04_pull.domain.Person;

public class PullXmlService {
	
	public Person currentPerson;

	public List<Person> readXml(InputStream is){
		//声明返回值
		List<Person> persons=null;
		//首先利用Xml.newPullParser()获取解析对象
		XmlPullParser xmlPullParser=Xml.newPullParser();
		try{
			// 解析文件
			xmlPullParser.setInput(is, "UTF-8");
			//获取解析的事件类型
			int eventType=xmlPullParser.getEventType();
			//判断文件解析的是否完毕
			while(eventType!=XmlPullParser.END_DOCUMENT){
				switch (eventType) {
				case XmlPullParser.START_DOCUMENT:
					persons=new ArrayList<Person>();
					break;

				case XmlPullParser.START_TAG:
					String tagName=xmlPullParser.getName();
					if("person".equals(tagName)){
						//创建person对象
						currentPerson=new Person();
						currentPerson.setId(Integer.parseInt(xmlPullParser
								.getAttributeValue(null, "id")));
					}else if("name".equals(tagName)){
						currentPerson.setName(xmlPullParser.nextText());
					}else if("age".equals(tagName)){
						currentPerson.setAge(new Short(xmlPullParser.nextText()));
					}
					break;
				case XmlPullParser.END_TAG:
					if("person".equals(xmlPullParser.getName()) && currentPerson!=null){
						//把person对象放到集合中去
						persons.add(currentPerson);
						currentPerson=null;
					}
					break;
				}
				eventType=xmlPullParser.next();
			}
			is.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		return persons;
	}
	
	
	
	// 写入
		public boolean write(List<Person> persons) {
			// 采用pull解析进行实现

			if (Environment.getExternalStorageState().equals(
					Environment.MEDIA_MOUNTED)) {

				// 获取sdcard目录 文件对象
				File sdCardDir = Environment.getExternalStorageDirectory();
				// 创建文件
				File file = new File(sdCardDir, "mycsdn.xml");

				XmlSerializer serializer = Xml.newSerializer();

				FileOutputStream fos = null;
				try {
					// 根据文件对象创建一个文件的输出流对象
					fos = new FileOutputStream(file);
					// 设置输出的流及编码
					serializer.setOutput(fos, "UTF-8");
					// 设置文件的开始
					serializer.startDocument("UTF-8", true);
					// persons标签开始
					serializer.startTag(null, "persons");
					for (Person person : persons) {
						// person标签的开始
						serializer.startTag(null, "person");
						// 设置person标签的属性
						serializer.attribute("null", "id", person.getId() + "");

						// 设置person标签的子标签 name
						serializer.startTag(null, "name");
						serializer.text(person.getName());
						serializer.endTag(null, "name");

						// 设置person标签的子标签的age
						serializer.startTag(null, "age");
						serializer.text(person.getAge() + "");
						serializer.endTag(null, "age");

						// person标签的结束
						serializer.endTag(null, "person");
					}

					// persons标签的结束
					serializer.endTag(null, "persons");
					// 文件的结束
					serializer.endDocument();

					fos.flush();
					fos.close();
					return true;
				} catch (Exception e) {
					e.printStackTrace();
				}

			}

			return false;
		}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PULL解析是一种基于事件驱动的解析方式,它逐行读取XML文档并触发事件,开发人员可以根据需要处理这些事件。相比于DOM解析方式,PULL解析方式更加轻量级和高效,适用于处理大型XML文件。 以下是使用PULL解析方式解析XML文件的基本步骤: 1. 创建一个XmlPullParser实例,该实例可以从一个输入流中读取XML文档。例如,可以使用以下代码创建一个XmlPullParser实例: ```java XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput(inputStream, null); ``` 2. 通过解析器读取XML文档中的每个元素,并在需要的时候处理它们。例如,可以使用以下代码循环读取XML文档中的每个元素: ```java int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_TAG) { // 开始标签 String tagName = parser.getName(); if (tagName.equals("book")) { // 处理book元素 String bookName = parser.getAttributeValue(null, "name"); } } else if (eventType == XmlPullParser.END_TAG) { // 结束标签 } else if (eventType == XmlPullParser.TEXT) { // 元素内容 String text = parser.getText(); } eventType = parser.next(); } ``` 3. 根据需要处理每个元素。例如,可以使用上面的代码来处理book元素并获取它的name属性。 注意:在处理XML文档时,可能会遇到异常情况,例如XML语法错误或无法打开输入流。因此,开发人员需要在代码中捕获这些异常并进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值