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檔案資料,執行個體化一個 XmlResourceParser2. 通過 XmlResourceParser的事件判斷,解析XmL 這種方式比SAX簡單些(個人認為)。