安卓解析XML之SAX

來源:互聯網
上載者:User

標籤:

***MySaxHandler***

package android_xml_sax;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class MySaxHandler extends DefaultHandler {    public List<Book> list ;    public Book book ;    public StringBuilder builder;            public List<Book> getList() {        return list;    }            @Override    public void startDocument() throws SAXException {        // TODO 自動產生的方法存根        super.startDocument();        list = new ArrayList<Book>();        builder = new StringBuilder();    }    /**     *方法說明:     *解析器在 XML 文檔中的每個元素的開始調用此方法;對於每個 startElement 事件都將有相應的 endElement 事件(即使該元素為空白時)。所有元素的內容都將在相應的 endElement 事件之前順序地報告。     *參數說明:     *uri - 名稱空間 URI,如果元素沒有名稱空間 URI,或者未執行名稱空間處理,則為空白字串     *localName - 本地名稱(不帶首碼),如果未執行名稱空間處理,則為空白字串     *qName - 限定名(帶有首碼),如果限定名不可用,則為空白字串     *atts - 串連到元素上的屬性。如果沒有屬性,則它將是空 Attributes 對象。在 startElement 返回後,此對象的值是未定義的     */    @Override    public void startElement(String uri, String localName, String qName,            Attributes attributes) throws SAXException {        // TODO 自動產生的方法存根        super.startElement(uri, localName, qName, attributes);        if(qName.equals("book")){            book = new Book();        }        builder.setLength(0);    }        /**     * 接收字元資料的通知,可以通過new String(ch,start,length)構造器,建立解析出來的字串文本.     *參數:     *ch - 來自 XML 文檔的字元     *start - 數組中的開始位置     *length - 從數組中讀取的字元的個數      */    @Override    public void characters(char[] ch, int start, int length)            throws SAXException {        // TODO 自動產生的方法存根        super.characters(ch, start, length);        builder.append(ch, start, length);  //將讀取的字元數組追加到builder中                 }    /**     * SAX 解析器會在 XML 文檔中每個元素的末尾調用此方法;對於每個 endElement 事件都將有相應的 startElement 事件(即使該元素為空白時)。     * 參數:     *uri - 名稱空間 URI,如果元素沒有名稱空間 URI,或者未執行名稱空間處理,則為空白字串     *localName - 本地名稱(不帶首碼),如果未執行名稱空間處理,則為空白字串     *qName - 限定的 XML 名稱(帶首碼),如果限定名不可用,則為空白字串     */    @Override    public void endElement(String uri, String localName, String qName)            throws SAXException {        // TODO 自動產生的方法存根        super.endElement(uri, localName, qName);        if(qName.equals("id")){            book.setId(Integer.parseInt(builder.toString()));        }else if(qName.equals("name")){            book.setName(builder.toString());        }else if(qName.equals("price")){            book.setPrice(Float.parseFloat(builder.toString()));        }else if(qName.equals("book")){            list.add(book);        }    }    @Override    public void endDocument() throws SAXException {        // TODO 自動產生的方法存根        super.endDocument();            }        }

***test.java***

package android_xml_sax;import java.io.File;import java.io.IOException;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;public class test {    public static void main(String[] args) {        // TODO 自動產生的方法存根                SAXParserFactory factory = SAXParserFactory.newInstance();        try {            SAXParser parser = factory.newSAXParser();            MySaxHandler handler = new MySaxHandler();            parser.parse(new File("src/xml/book.xml"), handler);            List<Book> list = handler.getList();            for(Book book:list){                System.out.println(book.toString());            }        } catch (ParserConfigurationException e) {            // TODO 自動產生的 catch 塊            e.printStackTrace();        } catch (SAXException e) {            // TODO 自動產生的 catch 塊            e.printStackTrace();        } catch (IOException e) {            // TODO 自動產生的 catch 塊            e.printStackTrace();        }            }}

***Book.java***

package android_xml_sax;public class Book {    private int id;    private String name;    private float price;        public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public float getPrice() {        return price;    }    public void setPrice(float price) {        this.price = price;    }    @Override    public String toString() {        return "id:" + id + ", name:" + name + ", price:" + price;    }}

***book.xml***

<?xml version="1.0" encoding="utf-8"?><books>    <book>        <id>1</id>        <name>Thinking In Java</name>        <price>80.00</price>    </book>    <book>        <id>2</id>        <name>Core Java</name>        <price>90.00</price>    </book>    <book>        <id>3</id>        <name>Hello, Andriod</name>        <price>100.00</price>    </book></books>

 

安卓解析XML之SAX

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.