zoukankan      html  css  js  c++  java
  • Android用Sax,Pull,Dom解析xml

    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     @Override
    15     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 Sax
    17 {
    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 block
    31             e.printStackTrace();
    32         } catch (SAXException e) {
    33             // TODO Auto-generated catch block
    34             e.printStackTrace();
    35         } catch (IOException e) {
    36             // TODO Auto-generated catch block
    37             e.printStackTrace();
    38         }
    39         return null;
    40     }
    41 }
    42 
    43 class XMLContentHandler extends DefaultHandler
    44 {
    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 SAXException
    55     {
    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 SAXException
    76     {
    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 SAXException
    86     {
    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 Pull
    14 {
    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 block
    70             e.printStackTrace();
    71         } catch (IOException e) {
    72             // TODO Auto-generated catch block
    73             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 Dom
    19 {
    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 block
    55             e.printStackTrace();
    56         } catch (IOException e) {
    57             // TODO Auto-generated catch block
    58             e.printStackTrace();
    59         } catch (SAXException e) {
    60             // TODO Auto-generated catch block
    61             e.printStackTrace();
    62         }
    63         return persons;
    64     }
    65 }
  • 相关阅读:
    STL学习笔记数值算法
    FreeTextBox使用
    IOS 通过ObjectiveC读取、解析Excel
    在C#中使用访问者(Visitor)模式对组合(Composite)对象进行验证
    监测ASP.NET应用程序性能最简单的方法
    Web开发常见的几个漏洞解决方法
    FTP文件操作之下载文件
    你所需要知道的一些git 的使用命令:历史
    C#中Hashtable、Dictionary详解以及写入和读取对比
    日志组件:log4j、logback、commonlogging
  • 原文地址:https://www.cnblogs.com/jayceli/p/2516348.html
Copyright © 2011-2022 走看看