標籤:
xml序列化是把記憶體資料寫入硬碟或SD卡。
XML檔案解析的方式:
1、dom解析,產生一個樹狀結構,並全部加入記憶體,在記憶體修改樹狀結構的節點即可。但是消耗記憶體大。
2、sax解析 基於事件的解析方式。速度快,效率高,但是不能倒退。
3、pull解析 基於事件的解析
pull解析方式:
第一步,初始化解析器,設定要解析的資料流。(此刻指向文檔的開始部分)
第二步,得到事件。
第三步,總的節點集合。
第四步,單個節點。
public class PullXMLTools {public PullXMLTools() {// TODO Auto-generated constructor stub}/** * @param inputStream * 從伺服器擷取xml檔案,以流的形式返回 * @param encode * 編碼格式 * @return * @throws Exception */public static List<Person> parseXML(InputStream inputStream, String encode)throws Exception {List<Person> list = null;Person person = null;// 裝載解析每一個person節點的內容// 建立一個xml解析的工廠XmlPullParserFactory factory = XmlPullParserFactory.newInstance();// 獲得xml解析類的引用XmlPullParser parser = factory.newPullParser();parser.setInput(inputStream, encode);// 獲得事件的類型int eventType = parser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {case XmlPullParser.START_DOCUMENT:list = new ArrayList<Person>();break;case XmlPullParser.START_TAG:if ("person".equals(parser.getName())) {person = new Person();// 取出屬性值int id = Integer.parseInt(parser.getAttributeValue(0));person.setId(id);} else if ("name".equals(parser.getName())) {String name = parser.nextText();// 擷取該節點的內容person.setName(name);} else if ("age".equals(parser.getName())) {int age = Integer.parseInt(parser.nextText());person.setAge(age);}break;case XmlPullParser.END_TAG:if ("person".equals(parser.getName())) {list.add(person);person = null;}break;}eventType = parser.next();}return list;}}
xml檔案是persons person
利用Java類載入可以載入工程中的xml檔案:
Android進階之XML檔案解析