Android 建立與解析XML(四)—— Pull方式

來源:互聯網
上載者:User

1、Pull概述

Android系統中和建立XML相關的包為org.xmlpull.v1,在這個包中不僅提供了用於建立XML的 XmlSerializer,還提供了用來解析XML的Pull方式解析器 XmlPullParser

XmlSerializer沒有像XmlPullParser那樣提取XML事件,而是把它們推出到資料流OutputStream或Writer中。

XmlSerializer提供了很直觀的API,即使用startDocument開始文檔,endDocument結束文檔,startTag開始元素,endTag結束元素,text添加文本等。


Pull方式建立XML,應用了標準xml構造器 org.xmlpull.v1.XmlSerializer來建立 XML ,org.xmlpull.v1.XmlPullParser來解析XML,需要匯入以下內容

org.xmlpull.v1

org.xmlpull.v1.XmlPullParser;

org.xmlpull.v1.XmlPullParserException;

org.xmlpull.v1.XmlPullParserFactory;

org.xmlpull.v1.XmlSerializer;

sdk源碼查看路徑(google code)

Pull 建立和解析 XML 的:

2、Pull 建立 XML

pull方式,建立xml是通過 XmlSerializer 類實現

首先,通過XmlSerializer得到建立xml的執行個體 xmlSerializer

接著,通過 xmlSerializer 設定輸出 xmlSerializer.setOutput,xmlSerializer.startDocument("utf-8", null)設定xml屬性等

然後,通過 xmlSerializer 建立 startDocument、startTag、text、endTag、endDocument等

Code

/** Pull方式,建立 XML */<br />public String pullXMLCreate(){<br />StringWriter xmlWriter = new StringWriter();</p><p>Person []persons = new Person[3];// 建立節點Person對象<br />persons[0] = new Person(1, "sunboy_2050", "http://blog.csdn.net/sunboy_2050");<br />persons[1] = new Person(2, "baidu", "http://www.baidu.com");<br />persons[2] = new Person(3, "google", "http://www.google.com");</p><p>try {<br />//// 方式一:使用Android提供的工具 + 生產力類android.util.Xml<br />//XmlSerializer xmlSerializer = Xml.newSerializer();</p><p>// 方式二:使用工廠類XmlPullParserFactory的方式<br />XmlPullParserFactory factory = XmlPullParserFactory.newInstance();<br />XmlSerializer xmlSerializer = factory.newSerializer();</p><p>xmlSerializer.setOutput(xmlWriter);// 儲存建立的xml</p><p>xmlSerializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);<br />//xmlSerializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " ");// 設定屬性<br />//xmlSerializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n");<br />xmlSerializer.startDocument("utf-8", null);// <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> </p><p>xmlSerializer.startTag("", "root");<br />xmlSerializer.attribute("", "author", "homer");<br />xmlSerializer.attribute("", "date", "2012-04-28");</p><p>int personsLen = persons.length;<br />for(int i=0; i<personsLen; i++) {<br />xmlSerializer.startTag("", "person");// 建立person節點</p><p>xmlSerializer.startTag("", "id");<br />xmlSerializer.text(persons[i].getId()+"");<br />xmlSerializer.endTag("", "id");</p><p>xmlSerializer.startTag("", "name");<br />xmlSerializer.text(persons[i].getName());<br />xmlSerializer.endTag("", "name");</p><p>xmlSerializer.startTag("", "blog");<br />xmlSerializer.text(persons[i].getBlog());<br />xmlSerializer.endTag("", "blog");</p><p>xmlSerializer.endTag("", "person");<br />}</p><p>xmlSerializer.endTag("", "root");<br />xmlSerializer.endDocument();</p><p>} catch (XmlPullParserException e) {// XmlPullParserFactory.newInstance<br />e.printStackTrace();<br />} catch (IllegalArgumentException e) {// xmlSerializer.setOutput<br />e.printStackTrace();<br />} catch (IllegalStateException e) {// xmlSerializer.setOutput<br />e.printStackTrace();<br />} catch (IOException e) {// xmlSerializer.setOutput<br />e.printStackTrace();<br />} catch (Exception e) {<br />e.printStackTrace();<br />}</p><p>savedXML(fileName, xmlWriter.toString());<br />return xmlWriter.toString();<br />}


運行結果:


3、Pull 解析 XML

pull方式,解析xml是通過 XmlPullParser 類實現

首先,通過XmlPullParser得到解析xml的執行個體 xpp

接著,通過 xpp設定輸入 xpp.setInput(is, "utf-8"),聲明定義儲存xml資訊的資料結構(如:Person數組)

然後,通過 xpp 解析 START_DOCUMENT、START_TAG、TEXT、END_TAG、END_DOCUMENT等

Code

/** Pull方式,解析 XML */<br />public String pullXMLResolve(){<br />StringWriter xmlWriter = new StringWriter();</p><p>InputStream is = readXML(fileName);<br />try {<br />//// 方式一:使用Android提供的工具 + 生產力類android.util.Xml<br />//XmlPullParser xpp = Xml.newPullParser();</p><p>// 方式二:使用工廠類XmlPullParserFactory的方式<br />XmlPullParserFactory factory = XmlPullParserFactory.newInstance();<br />XmlPullParser xpp = factory.newPullParser();</p><p>xpp.setInput(is, "utf-8");</p><p>List<Person> personsList = null;// 儲存xml的person節點<br />Person person = null;<br />StringBuffer xmlHeader = null;// 儲存xml頭部<br />String ele = null;// Element flag</p><p>int eventType = xpp.getEventType();<br />while(XmlPullParser.END_DOCUMENT != eventType) {<br />switch (eventType) {<br />case XmlPullParser.START_DOCUMENT:<br />personsList = new ArrayList<Person>();// 初始化persons<br />xmlHeader = new StringBuffer();// 初始化xmlHeader<br />break;</p><p>case XmlPullParser.START_TAG:<br />if("root".equals(xpp.getName())) {<br />String attrAuthor = xpp.getAttributeValue(0);<br />String attrDate = xpp.getAttributeValue(1);<br />xmlHeader.append("root").append("\t\t");<br />xmlHeader.append(attrAuthor).append("\t");<br />xmlHeader.append(attrDate).append("\n");<br />} else if("person".equals(xpp.getName())) {<br />person = new Person();// 建立person執行個體<br />} else if("id".equals(xpp.getName())) {<br />ele = "id";<br />} else if("name".equals(xpp.getName())) {<br />ele = "name";<br />} else if("blog".equals(xpp.getName())) {<br />ele = "blog";<br />} else {<br />ele = null;<br />}<br />break;</p><p>case XmlPullParser.TEXT:<br />if(null != ele) {<br />if("id".equals(ele)) {<br />person.setId(Integer.parseInt(xpp.getText()));<br />} else if("name".equals(ele)) {<br />person.setName(xpp.getText());<br />} else if("blog".equals(ele)) {<br />person.setBlog(xpp.getText());<br />}<br />}<br />break;</p><p>case XmlPullParser.END_TAG:<br />if("person".equals(xpp.getName())){<br />personsList.add(person);<br />person = null;<br />}<br />ele = null;<br />break;<br />}</p><p>eventType = xpp.next();// 下一個事件類型<br />}</p><p>xmlWriter.append(xmlHeader);<br />int personsLen = personsList.size();<br />for(int i=0; i<personsLen; i++) {<br />xmlWriter.append(personsList.get(i).toString());<br />}</p><p>} catch (XmlPullParserException e) {// XmlPullParserFactory.newInstance<br />e.printStackTrace();<br />} catch (Exception e) {<br />e.printStackTrace();<br />}</p><p>return xmlWriter.toString();<br />}

運行結果:

4、Person類

請參見前面部落格 Android 建立與解析XML(二)—— Dom方式 【4、Person類】

代碼下載

參考推薦:

org.xmlpull.v1

pull建立xml

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.