使用Pull解析和读取XML文件

在Android开发中,解析和读取xml是难免的.如何选择作为xml解析的工具类呢?因为是基于Android移动平台开发,那么内存就显得弥足珍贵了.

DOM、SAX、Pull,推荐使用SAX、Pull作为xml的解析工具类,它们比和Dom相比,解析速度要快,占用系统内存少.

Pull解析XML文件:

public static List<Person> parseXml(InputStream inStream)
			throws XmlPullParserException, IOException {
		List<Person> persons = null;
		Person person = null;
		// 使用Android提供的Xml创建pull解析器
		XmlPullParser xmlPullParser = Xml.newPullParser();
		// 设置流文件
		xmlPullParser.setInput(inStream, "UTF-8");
		// 产生第一个事件
		int eventType = xmlPullParser.getEventType();
		while (eventType != XmlPullParser.END_DOCUMENT) {// 如果不是文档末尾

			String tag = xmlPullParser.getName();//获取节点名
			Log.i(TAG, tag+"====>");
			switch (eventType) {
			case XmlPullParser.START_DOCUMENT:
				persons = new ArrayList<Person>();
				break;
			case XmlPullParser.START_TAG:
				if ("person".equals(tag)) {
					person = new Person();
					person.setPersonId(Integer.valueOf(xmlPullParser.getAttributeValue(0)));
				} else if ("name".equals(tag)) {
					//注意:这里获取文本元素是通过nextText()不是getText()
					person.setPersonName(xmlPullParser.nextText());
				} else if ("age".equals(tag)) {
					person.setPersonAge(Integer.valueOf(xmlPullParser.nextText()));
				}
				break;
			case XmlPullParser.END_TAG:
				if("person".equals(tag))
					persons.add(person);
				break;
			}
			eventType = xmlPullParser.next();// 推进到下一个元素,并触发事件
		}
		return persons;
	}

 写入Xml文件到Android系统:

public static void writeXml(List<Person> persons,OutputStream outStream) throws IllegalArgumentException, IllegalStateException, IOException{
		XmlSerializer xmlSerializer = Xml.newSerializer();
		xmlSerializer.setOutput(outStream, "UTF-8");
		xmlSerializer.startDocument("UTF-8", true);//--><?xml ... ?>
		xmlSerializer.startTag(null, "persons");
		for(Person person:persons){
			xmlSerializer.startTag(null, "person");
			xmlSerializer.attribute(null, "id", person.getPersonId().toString());
			
			xmlSerializer.startTag(null, "name");
			xmlSerializer.text(person.getPersonName());
			xmlSerializer.endTag(null, "name");
			
			xmlSerializer.startTag(null, "age");
			xmlSerializer.text(person.getPersonAge().toString());
			xmlSerializer.endTag(null, "age");
			
			xmlSerializer.endTag(null, "person");
		}
		xmlSerializer.endTag(null, "persons");
		xmlSerializer.endDocument();
		outStream.flush();//要刷新缓冲区
		outStream.close();
		Log.i(TAG, outStream.toString());
	}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值