Android 開發中使用SAX解析xml小結

來源:互聯網
上載者:User

1. 解析類:

      繼承和重寫DefaultHandler 。

 import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import android.util.Log; public class EmployeeHandler extends DefaultHandler {    private static final String TAG = "xml";    private List<Employee> data;    private Employee employee;    private String preTAG;        private static final String _Employee="Employee";    private static final String _name="name";    private static final String _time="SignInTime";    private static final String _phoneNumber = "phoneNumber";        public EmployeeHandler(List<Employee> data){        super();        this.data = data;    }    //解析文檔頭    @Override    public void startDocument() throws SAXException {
//建立一個數組鏈表,元素為對象,用來存放xml解析到得資料        if(data==null)            data=new ArrayList<Employee>();        Log.d(TAG, "startDocument ------- :");        super.startDocument();    }    @Override    public void endDocument() throws SAXException {        Log.d(TAG, "endDocument ------- :");        super.endDocument();    }    //文檔結束標籤    @Override    public void startElement(String uri, String localName, String qName,            Attributes attributes) throws SAXException {        Log.d(TAG, "startElement ------- :localName :"+localName);         preTAG = localName;        if(_Employee.equalsIgnoreCase(localName)){
//建立用來儲存標籤之間的值的對象            employee=new Employee();        }                 super.startElement(uri, localName, qName, attributes);    }        @Override    public void endElement(String uri, String localName, String qName)            throws SAXException {        preTAG = "";        if(_Employee.equalsIgnoreCase(localName)){            data.add(employee);            Log.d(TAG, "endElement ------- :һ ");        }        super.endElement(uri, localName, qName);    }    //主要解析放在這裡    @Override    public void characters(char[] ch, int start, int length)            throws SAXException {        String info = new String(ch,start,length);          Log.d(TAG, "characters ------- : property value :  " +info);
//將標籤中之間的值存入對象欄位        if(preTAG.equalsIgnoreCase(_name)){            employee.setName(info);        } else if (preTAG.equalsIgnoreCase(_phoneNumber))        {        employee.setPhoneNumber(info);        }else if(preTAG.equalsIgnoreCase(_time)){        employee.setTime(info);        }        super.characters(ch, start, length);    }        public List<Employee> getdata(){        return data;    }}
 
2.EmployeeXmlHelper類:
   封裝瞭解析所需的前置、後置處理邏輯成工具類,方便調用。
 import java.io.ByteArrayInputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.InputSource;import org.xml.sax.XMLReader; public class EmployeeXmlHelper {public static List<Employee> parserXML(String str){if(null == str){return null;}        String _str = str.trim();        List<Employee> data = new ArrayList<Employee>();        SAXParserFactory factory=SAXParserFactory.newInstance();        XMLReader reader;        try {                byte[] bytes = _str.getBytes();        ByteArrayInputStream  bis = new ByteArrayInputStream (bytes);            InputSource is = new InputSource(  (InputStream)bis);            is.setEncoding("utf-8");            reader = factory.newSAXParser().getXMLReader();            reader.setContentHandler(new EmployeeHandler(data));              reader.parse(is);          } catch (Exception e) {            e.printStackTrace();        }         return data;    }}

3.model類

package com.swift.phoneAttendance.model;import java.io.Serializable;public class Employee implements Serializable {String name = null;String phoneNumber = null;String time = null;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}} 
4.用戶端調用方式:
   xml內容如下:
   <<Result><Status>True<Status><Employee>       <Name></Name>       <PhoneNumber></PhoneNumber>     </ Employee><Employee></ Result>
   調用解析:
   private List<Employee> data = EmployeeXmlHelper.parserXML(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.