使用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());
	}

 

你可能感兴趣的:(xml,android)