Xml解析

public static List<String> parseXmlStr(String xmlStr) { // 設計模式(工廠模式)
    try { List<String> data = new ArrayList<String>(); // 建立對象有兩種方法(只有一種狀況能夠建立對象) // 1. new 類名(); // 2. 類名.newInstance();
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); // 從工廠中獲取一個parser(專門用來分析xml數據)
        XmlPullParser parser = factory.newPullParser(); // 把輸入的字符串轉換成字符輸入流Reader
        Reader in = new StringReader(xmlStr); parser.setInput(in); // 設置parser的輸入源(數據的來源)
        int type = parser.getEventType(); // 分析事件 // 類型包括 // START_DOCUMENT 文檔的開始(第一個標籤前) (0) // END_DOCUMENT 文檔的結束(最後一個標籤後) (1) // START_TAG 標籤的開始 <city> (2) // END_TAG 標籤的結束</city> (3) // TEXT 沒有標籤的普通文本 beihai (4)
        boolean flag = false; while(true) { // 一塊一塊的解析xml字符串 類型可能爲上面的內容 // 把開始標籤爲name和結束標籤爲name中間的內容找出來
            if(type == XmlPullParser.START_DOCUMENT) { // 文檔開始
                Log.i("XmlPull", "START_DOCUMENT"); } else if(type == XmlPullParser.END_DOCUMENT) { // 文檔結束 退出循環
                Log.i("XmlPull", "END_DOCUMENT"); break; } else if(type == XmlPullParser.START_TAG) { // 標籤開始
                String name = parser.getName(); // 獲取標籤的名稱
                Log.i("XmlPull", "START_TAG: " + name); if(name.equals("name")) { // 開始標籤爲<name> 接下來能夠獲取text了 // 設置boolean類型的變量爲true
                    flag = true; } } else if (type == XmlPullParser.END_TAG) { // 標籤結束
                String name = parser.getName(); // 獲取標籤的名稱
                Log.i("XmlPull", "END_TAG: " + name); flag = false; } else if (type== XmlPullParser.TEXT) { // 普通文本
                String text = parser.getText(); // 獲取文本的內容
                Log.i("XmlPull", "TEXT: " + text); if(flag == true) { data.add(text); } } // 移動到下一個塊(標籤、文本)
 parser.next(); type = parser.getEventType(); } return data; } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; }

比較DOM、SAM、PULL?設計模式

DOM:函數

消耗內存:先把xml文檔都讀到內存中,而後再用DOM JAVASE來訪問樹形結構,並獲取數據。這個寫起來很簡單,可是很消耗內存。要是數據過大,手機不夠牛逼,可能手機直接死機spa

SAX:設計

解析效率高,佔用內存少,基於事件驅動的:更加簡單地說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束、文檔(document)結束等地方時通知事件處理函數,由事件處理函數作相應動做,而後繼續一樣的掃描,直至文檔結束code

PULL:xml

與SAX相似,也是基於事件驅動,咱們能夠調用它的next()方法,來獲取下一個解析事件(就是開始文檔,結束文檔,開始標籤,結束標籤),當處於某個元素時能夠調用XmlPullParser的getAttribute()方法來獲取屬性的值,也可調用用它的nextText()獲取本節點的值對象

相關文章
相關標籤/搜索