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