Android利用PULL解析XML文件(总结)
Android中解析xml的方法有多种,这里主要记录一下利用PULL解析的基本方法(比较方便)。
效果图如下:
附上一个XmlParseUtils.java(xml文件解析工具类)
package com.deepreality.xmlparsedemo; import android.util.Xml; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; /** * xml文件解析工具类 */ public class XmlParseUtils { /** * 获取xml内容 * @param xml * @return * @throws Exception */ public static ArrayList<Person> getXmlData(InputStream xml)throws Exception { //XmlPullParserFactory pullPaser = XmlPullParserFactory.newInstance(); ArrayList<Person> persons = null; Person person = null; // 创建一个xml解析的工厂 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); // 获得xml解析类的引用 XmlPullParser parser = factory.newPullParser(); parser.setInput(xml, "UTF-8"); // 获得事件的类型 int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>(); break; case XmlPullParser.START_TAG: if ("person".equals(parser.getName())) { person = new Person(); // 取出属性值 int id = Integer.parseInt(parser.getAttributeValue(0)); person.set_userId(String.valueOf(id)); } else if ("name".equals(parser.getName())) { String name = parser.nextText();// 获取该节点的内容 person.set_Name(name); } break; case XmlPullParser.END_TAG: if ("person".equals(parser.getName())) { persons.add(person); person = null; } break; } eventType = parser.next(); } return persons; } /** * 保存xml * @param persons * @param out * @throws Exception */ public static void saveXmlData(List<Person> persons, OutputStream out) throws Exception { XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(out, "UTF-8"); serializer.startDocument("UTF-8", true); serializer.startTag(null, "persons"); for (Person p : persons) { serializer.startTag(null, "person"); serializer.attribute(null, "id", p.get_userId() + ""); serializer.startTag(null, "name"); serializer.text(p.get_Name()); serializer.endTag(null, "name"); serializer.endTag(null, "person"); } serializer.endTag(null, "persons"); serializer.endDocument(); out.flush(); out.close(); } }
其中,静态方法传的参数为:InputStream(输入流),OutputStream(输出流)。
String filePath = "/mnt/sdcard/XmlFiles/test1.xml"; File xmlFile = new File(filePath); InputStream is = new FileInputStream(xmlFile);
输出流创建方法类似。