Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android xml 解析

android xml 解析

編輯:關於Android編程

android xml 解析 在android開發中,經常用到去解析xml文件,常見的解析xml的方式有一下三種:SAX、Pull、Dom解析方式。   SAX特點: 解析方式是一種基於事件驅動的,消耗的內存少    Pull特點: 解析方式是一種基於事件驅動的,消耗的內存少,在android系統內部的xml解析都是用這種方式   Dom特點: dom是把全部文件讀入到內存中,這種方式很消耗內存,對於內存資源本來就很少的android手機,這種 方式不太建議使用。   個人建議:  SAX和pull都比較適合mobile,Dom適合服務器解析,隨著mobile手機的內存增加,Dom也許可以使用。   SAX解析例子: XML: [html]  <?xml version="1.0" encoding="utf-8"?>   <users>   <user name="admin0" age="26">root0</user>   <user name="admin1" age="26">root1</user>   <user name="admin2" age="26">root2</user>   <user name="admin3" age="26">root3</user>   </users>   放在src/目錄下     SAXHandler: [java]   package com.hualu.androidxml;      import java.util.ArrayList;   import java.util.List;      import org.xml.sax.Attributes;   import org.xml.sax.SAXException;   import org.xml.sax.helpers.DefaultHandler;      public class SAXHandler extends DefaultHandler {          private List<User> users ;       User user ;       int i = 1 ;       @Override       public void startDocument() throws SAXException {           users = new ArrayList<User>() ;       }              @Override       public void endDocument() throws SAXException {           super.endDocument();       }              @Override       public void startElement(String uri, String localName, String qName,               Attributes attributes) throws SAXException {                      if("user".equals(localName)){               i = 2 ;               user = new User() ;               user.setName(attributes.getValue("name")) ;               user.setAge(attributes.getValue("age")) ;           }                  }              @Override       public void endElement(String uri, String localName, String qName)               throws SAXException {           if("user".equals(localName)){               users.add(user) ;           }       }              @Override       public void characters(char[] ch, int start, int length)               throws SAXException {           if(i == 2)               user.setPassword(String.valueOf(ch,start,length)) ;                      i = 1 ;       }          public List<User> getUsers() {           return users ;                  }          }   SAXClient: [java]   package com.hualu.androidxml;      import java.io.InputStream;   import java.util.List;      import javax.xml.parsers.SAXParser;   import javax.xml.parsers.SAXParserFactory;      import android.content.Context;      public class SAXClient {          public void parserXML(Context context) {           try {               SAXParserFactory factory = SAXParserFactory.newInstance();               SAXParser parser = factory.newSAXParser();               SAXHandler handler = new SAXHandler() ;               InputStream file = SAXClient.class.getClassLoader().getResourceAsStream("user.xml");               parser.parse(file, handler) ;               List<User> users = handler.getUsers() ;               for(User user: users){                   System.out.println(user.getName() + " ; " + user.getPassword() + "  ;  " + user.getAge());               }           } catch (Exception e) {           }          }   }   具體步驟: 1、實例化一個工廠SAXParserFactory   2、實例化SAXPraser對象,創建XMLReader 解析器   3、實例化Handler,處理器   4、注冊解析器   4、讀取文件流   5、解析文件     Pull解析例子: XML: [html]  <?xml version="1.0" encoding="utf-8"?>   <users>   <user name="admin0" age="26">root0</user>   <user name="admin1" age="26">root1</user>   <user name="admin2" age="26">root2</user>   <user name="admin3" age="26">root3</user>   </users>   放在res/xml目錄下。   PullXMLParser: [java]   package com.hualu.androidxml;      import java.util.ArrayList;   import java.util.List;      import android.app.Activity;   import android.content.res.XmlResourceParser;      public class PullXMLParser {              private Activity activity ;              public PullXMLParser(Activity activity ){           this.activity  = activity;       }              public List<User> parser(){           List<User> users = new ArrayList<User>() ;           XmlResourceParser xrParser = activity.getResources().getXml(R.xml.user);           try{               while(xrParser.getEventType() != XmlResourceParser.END_DOCUMENT) {                   if(xrParser.getEventType() == XmlResourceParser.START_TAG){                       String tagName = xrParser.getName() ;                       if("user".equals(tagName)){                           User user = new User() ;                           user.setName(xrParser.getAttributeValue(null, "name")) ;                           user.setAge(xrParser.getAttributeValue(null, "age")) ;                           user.setPassword(xrParser.getText()) ;                           users.add(user) ;                       }                   }                   xrParser.next() ;               };           }catch (Exception e) {           }           return users ;       }      }   具體步驟: 1. 通過Resource,取得XML文件數據,實例化一個 XmlResourceParser 2. 通過 XmlResourceParser的事件判斷,解析XmL   這種方式比SAX簡單些(個人認為)。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved