Android解析xml的三种方式。分别有Sax,Pull,Dom。

来看他们各是怎么实现的。

这是项目结构:

解析文件为Person.xml:

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <persons> 3     <person id="1"> 4         <name>cxa</name> 5         <age>30</age> 6     </person> 7     <person id="2"> 8         <name>acs</name> 9         <age>25</age>10     </person>11     <person id="3">12         <name>hgf</name>13         <age>30</age>14     </person>15     <person id="4">16         <name>rty</name>17         <age>25</age>18     </person>19     <person id="5">20         <name>gfj</name>21         <age>30</age>22     </person>23     <person id="6">24         <name>qty</name>25         <age>25</age>26     </person>27     <person id="7">28         <name>bdf</name>29         <age>30</age>30     </person>31     <person id="8">32         <name>liu</name>33         <age>25</age>34     </person>35 </persons> 

分别来看各个文件实现。

XmlParserActivity.java:

 1 package com.jayce.xmlparser; 2  3 import java.io.InputStream; 4 import java.util.List; 5  6 import android.app.Activity; 7 import android.os.Bundle; 8 import android.util.Log; 9 10 public class XmlParserActivity extends Activity {11     private static final String TAG = "XmlParserActivity";12     13     /** Called when the activity is first created. */14     @Override15     public void onCreate(Bundle savedInstanceState) {16         super.onCreate(savedInstanceState);17         setContentView(R.layout.main);18         InputStream in = this.getResources().openRawResource(R.raw.person);19         List<Person> person = Pull.readXML(in);20         if(null != person)21         {22             for(int i = 0; i < person.size(); i++)23             {24                 Log.i(TAG, "index:" + i);25                 Person p = person.get(i);26                 Log.i(TAG, "id:" + p.getID());27                 Log.i(TAG, "name:" + p.getName());28                 Log.i(TAG, "age:" + p.getAge());29             }30         }31     }32 }

Person.java:

 1 package com.jayce.xmlparser; 2  3 public class Person 4 { 5     private Integer mID; 6     private String mName; 7     private Short mAge; 8      9     public Integer getID()10     {11         return mID;12     }13     14     public void setID(Integer id)15     {16         this.mID = id;17     }18     19     public String getName()20     {21         return mName;22     }23     24     public void setName(String name)25     {26         this.mName = name;27     }28     29     public Short getAge()30     {31         return mAge;32     }33     34     public void setAge(Short age)35     {36         this.mAge = age;37     }38 }

Sax.java:

 1 package com.jayce.xmlparser; 2  3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.ArrayList; 6 import java.util.List; 7  8 import javax.xml.parsers.ParserConfigurationException; 9 import javax.xml.parsers.SAXParser;10 import javax.xml.parsers.SAXParserFactory;11 12 import org.xml.sax.Attributes;13 import org.xml.sax.SAXException;14 import org.xml.sax.helpers.DefaultHandler;15 16 public class Sax17 {18     public static List<Person> readXML(InputStream in)19     {20         SAXParserFactory spf = SAXParserFactory.newInstance();21         try {22             SAXParser saxParser = spf.newSAXParser();23             //saxParser.setProperty("http://xml.org/sax/features/namespaces", true);24             //saxParser.setProperty("http://xml.org/sax/features/namespace-prefixes", false);25             XMLContentHandler handler = new XMLContentHandler();26             saxParser.parse(in, handler);27             in.close();28             return handler.getPersons();29         } catch (ParserConfigurationException e) {30             // TODO Auto-generated catch block31             e.printStackTrace();32         } catch (SAXException e) {33             // TODO Auto-generated catch block34             e.printStackTrace();35         } catch (IOException e) {36             // TODO Auto-generated catch block37             e.printStackTrace();38         }39         return null;40     }41 }42 43 class XMLContentHandler extends DefaultHandler44 {45     private List<Person> persons = null;46     private Person currentPerson;47     private String tagName = null;48     49     public List<Person> getPersons()50     {51         return persons;52     }53     54     public void startDocument() throws SAXException55     {56         persons = new ArrayList<Person>();57     }58     59     public void characters(char[] ch, int start, int length)60     {61         if(null != tagName)62         {63             String data = new String(ch, start, length);64             if(tagName.equalsIgnoreCase("name"))65             {66                 this.currentPerson.setName(data);67             }68             else if(tagName.equalsIgnoreCase("age"))69             {70                 this.currentPerson.setAge(new Short(data));71             }72         }73     }74     75     public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException76     {77         this.tagName = localName;78         if(tagName.equalsIgnoreCase("person"))79         {80             currentPerson = new Person();81             currentPerson.setID(new Integer(atts.getValue("id")));82         }83     }84     85     public void endElement(String uri, String localName, String name) throws SAXException86     {87         if(localName.equalsIgnoreCase("person"))88         {89             persons.add(currentPerson);90             currentPerson = null;91         }92         this.tagName = null;93     }94 }

Pull.java:

 1 package com.jayce.xmlparser; 2  3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.ArrayList; 6 import java.util.List; 7  8 import org.xmlpull.v1.XmlPullParser; 9 import org.xmlpull.v1.XmlPullParserException;10 11 import android.util.Xml;12 13 public class Pull14 {15     public static List<Person> readXML(InputStream in)16     {17         XmlPullParser parser = Xml.newPullParser();18         19         try {20             parser.setInput(in, "UTF-8");21             int eventType = parser.getEventType();22             Person currentPerson = null;23             List<Person> persons = null;24             while(eventType != XmlPullParser.END_DOCUMENT)25             {26                 switch(eventType)27                 {28                     case XmlPullParser.START_DOCUMENT:29                     {30                         persons = new ArrayList<Person>();31                     }32                     break;33                     case XmlPullParser.START_TAG:34                     {35                         String tag = parser.getName();36                         if(tag.equalsIgnoreCase("person"))37                         {38                             currentPerson = new Person();39                             currentPerson.setID(new Integer(parser.getAttributeValue(null, "id")));40                         }41                         else if(currentPerson != null)42                         {43                             if(tag.equalsIgnoreCase("name"))44                             {45                                 currentPerson.setName(parser.nextText());46                             }47                             else if(tag.equalsIgnoreCase("age"))48                             {49                                 currentPerson.setAge(new Short(parser.nextText()));50                             }51                         }52                     }53                     break;54                     case XmlPullParser.END_TAG:55                     {56                         if(parser.getName().equalsIgnoreCase("person") && null != currentPerson)57                         {58                             persons.add(currentPerson);59                             currentPerson = null;60                         }61                     }62                     break;63                 }64                 eventType = parser.next();65             }66             in.close();67             return persons;68         } catch (XmlPullParserException e) {69             // TODO Auto-generated catch block70             e.printStackTrace();71         } catch (IOException e) {72             // TODO Auto-generated catch block73             e.printStackTrace();74         }75         76         return null;77     }78 }

Dom.java:

 1 package com.jayce.xmlparser; 2  3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.ArrayList; 6 import java.util.List; 7  8 import javax.xml.parsers.DocumentBuilder; 9 import javax.xml.parsers.DocumentBuilderFactory;10 import javax.xml.parsers.ParserConfigurationException;11 12 import org.w3c.dom.Document;13 import org.w3c.dom.Element;14 import org.w3c.dom.Node;15 import org.w3c.dom.NodeList;16 import org.xml.sax.SAXException;17 18 public class Dom19 {20     public static List<Person> readXML(InputStream in)21     {22         List<Person> persons = new ArrayList<Person>();23         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();24         try {25             DocumentBuilder builder = factory.newDocumentBuilder();26             Document dom = builder.parse(in);27             Element root = dom.getDocumentElement();28             NodeList items = root.getElementsByTagName("person");29             for(int i = 0; i < items.getLength(); i++)30             {31                 Person person = new Person();32                 Element personNode = (Element)items.item(i);33                 person.setID(new Integer(personNode.getAttribute("id")));34                 NodeList childsNodes = personNode.getChildNodes();35                 for(int j = 0; j < childsNodes.getLength(); j++)36                 {37                     Node node = (Node)childsNodes.item(j);38                     if(Node.ELEMENT_NODE == node.getNodeType())39                     {40                         if("name".equalsIgnoreCase(node.getNodeName()))41                         {42                             person.setName(node.getFirstChild().getNodeValue());43                         }44                         else  if("age".equalsIgnoreCase(node.getNodeName()))45                         {46                             person.setAge(new Short(node.getFirstChild().getNodeValue()));47                         }48                     }49                 }50                 persons.add(person);51             }52             in.close();53         } catch (ParserConfigurationException e) {54             // TODO Auto-generated catch block55             e.printStackTrace();56         } catch (IOException e) {57             // TODO Auto-generated catch block58             e.printStackTrace();59         } catch (SAXException e) {60             // TODO Auto-generated catch block61             e.printStackTrace();62         }63         return persons;64     }65 }

更多相关文章

  1. mono for android之文件系统与应用程序首选项
  2. android之JSON解析(一)
  3. android之简单数据存储Preference
  4. layout设计 屏幕适配
  5. Android(安卓)播放 Gif 图片控件
  6. android apkbuilder.bat批处理
  7. Android(安卓)SDK三种更新失败及其解决方法
  8. android系统内存管理知识(一)
  9. android 导出带数据库文件的APK

随机推荐

  1. Android:关闭软键盘自动弹出的解决方案
  2. Android(安卓)SDK无法更新解决方式(非常有
  3. Android(安卓)资源文件中的符号含义与说
  4. 【Android(安卓)应用开发】GitHub 优秀的
  5. Android阿拉伯适配rtl
  6. 快速下载 Android(安卓)framework 源码
  7. mac 下 android studio 识别不出真机
  8. Android(安卓)popupWindow响应back按键并
  9. Android类似于滚动通知栏信息播报功能
  10. android触摸屏坐标手工校准/调整成功