Android中的XML的Pull解析與產生

來源:互聯網
上載者:User

標籤:android   標籤   

1、Pull解析簡介        Pull解析是Android系統內建的一種對XML的解析方式,它與SAX解析方式基本一致,都包括開始元素和結束元素事件,使用parser.next()可以進入下一個元素並觸發相應事件。但是它們不同的是,SAX的事件驅動是回調相應方法,需要提供回調的方法,而在SAX內部自動調用相應的方法。而Pull解析器並沒有強制要求提供觸發的方法。因為它觸發的事件並不是一個方法,而是一個數字,至於觸發的時間要不要處理,這個可以由程式員自己來決定。


2、五個常量事件        Pull解析器返回的是一個數字,類似於一個訊號。我們在Android的網路處理中,也常常使用數字作為處理的標識,比如我們常用的Handler機制。Pull解析器為我們定義了五個常量,如下:
XmlPullParser.START_DOCUMENT;(開始對文檔的解析)XmlPullParser.START_TAG;(開始對元素的解析)XmlPullParser.TEXT;(解析文本)XmlPullParser.END_TAG;(開始對元素的解析)XmlPullParser.END_DOCUMENT;(結束對文檔的解析)
最常用的方法是:
parser.getEventType();      // 觸發事件,開始解析parser.next();              // 解析下一個事件parser.getAttributeValue(); //獲得相應屬性的值


3、解析XML文檔

       步驟不多說,序列化,得到方法,設定參數,開始解析。範例程式碼如下:

        public static List<Person> getPersons(InputStream inStream) throws Exception{Person person = null;List<Person> persons = null;XmlPullParser pullParser = Xml.newPullParser();pullParser.setInput(inStream, "UTF-8");int event = pullParser.getEventType();//觸發第一個事件while(event!=XmlPullParser.END_DOCUMENT){switch (event) {case XmlPullParser.START_DOCUMENT:persons = new ArrayList<Person>();break;case XmlPullParser.START_TAG:if("person".equals(pullParser.getName())){int id = new Integer(pullParser.getAttributeValue(0));person = new Person();person.setId(id);}if(person!=null){if("name".equals(pullParser.getName())){person.setName(pullParser.nextText());}if("age".equals(pullParser.getName())){person.setAge(new Short(pullParser.nextText()));}}break;case XmlPullParser.END_TAG:if("person".equals(pullParser.getName())){persons.add(person);person = null;}break;}event = pullParser.next();}return persons;}


4、產生XML檔案

        在SAX對XML文檔的解析中,我們提到過,SAX解析不支援檔案的修改、產生,那麼Pull解析呢?Pull解析是支援對檔案的修改的。

實現XML的序列化:

XmlSerializer serializer = Xml.newSerializer();

指定輸出介面資訊:

serializer.setOutput(outStream, "UTF-8");serializer.startDocument("UTF-8", true);

標籤的開始和結束:

serializer.startTag(null, "persons");serializer.endTag(null, "persons");

解析代碼如下:

for(Person person : persons){serializer.startTag(null, "person");serializer.attribute(null, "id", person.getId().toString());serializer.startTag(null, "name");serializer.text(person.getName());serializer.endTag(null, "name");serializer.startTag(null, "age");serializer.text(person.getAge().toString());serializer.endTag(null, "age");serializer.endTag(null, "person");}

記得關閉流檔案:

outStream.flush();outStream.close();






Android中的XML的Pull解析與產生

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.