JAVA解析XML之SAX方式

來源:互聯網
上載者:User

標籤:

JAVA解析XML之SAX方式SAX解析xml步驟

  通過SAXParseFactory的靜態newInstance()方法擷取SAXParserFactory執行個體factory
  通過SAXParserFactory執行個體的newSAXParser()方法返回SAXParser執行個體parser
  建立一個類繼承DefaultHandle,重寫方法進行業務處理並建立這個類的執行個體handle

 

重寫DefaultHandle類的方法

  startElement方法用來遍曆xml檔案的開始標籤;

  endElement方法用來遍曆xml檔案的結束標籤;

  startDocument方法用來標識解析開始;

  endDocument方法用來標識解析結束。

  characters方法用來擷取text

  其中:參數qName 遍曆到的元素的名稱

     且同樣會出現空白和換行的問題

下面直接上代碼
<?xml version="1.0" encoding="UTF-8"?><bookstore>    <book id="1">        <name>JAVA編程思想</name>        <anthor>****</anthor>        <year>2000</year>    </book>    <book id="2">        <name>瘋狂JAVA系列</name>        <anthor>李剛</anthor>        <price>89</price>    </book></bookstore>
books.xmlSAX.java
package pers.zww.xml.handler;import javax.xml.stream.events.StartElement;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SAXParserHandler extends DefaultHandler{    int bookIndex=0;    /*     * 解析XML元素     */    @Override    public void startElement(String uri, String localName, String qName,            Attributes attributes) throws SAXException {        super.startElement(uri, localName, qName, attributes);        //開始解析book元素的屬性                if (qName.equals("book")) {            bookIndex++;            System.out.println("開始遍曆第"+bookIndex+"本書");            //            //已知book元素下的屬性名稱,根據屬性名稱擷取屬性值//            String value=attributes.getValue("id");//            System.out.println("book的屬性值:"+value);            //未知book元素下的屬性名稱及個數            int num=attributes.getLength();            for (int i = 0; i < num; i++) {                System.out.print("book元素的第"+(i+1)+"個屬性名稱:"+attributes.getQName(i));                System.out.println(" && 屬性值:"+attributes.getValue(i));                            }        }else if(!qName.equals("book")&&!qName.equals("bookstore")){            System.out.print("節點名:"+qName);                    }else {                    }    }    @Override    public void characters(char[] ch, int start, int length)            throws SAXException {        // TODO Auto-generated method stub        super.characters(ch, start, length);        String val=new String(ch, start, length);        if (!val.trim().equals("")) {            System.out.println(" && 節點值:"+val);        }    }        /*     * 用來遍曆xml檔案的結束標籤     */    @Override    public void endElement(String uri, String localName, String qName)            throws SAXException {        super.endElement(uri, localName, qName);        //是否針對一本書已經遍曆結束        if (qName.equals("book")) {            System.out.println("=======================");        }    }        /*     * 用來標誌解析開始     */    @Override    public void startDocument() throws SAXException {        // TODO Auto-generated method stub        super.startDocument();        //第一行開始        System.out.println("SAX解析開始");    }        /*     * 用來標誌解析結束     */    @Override    public void endDocument() throws SAXException {        // TODO Auto-generated method stub        super.endDocument();        //最後一行結束        System.out.println("SAX解析結束");    }}
SAXParserHandler.javaSAX與DOM對比

  DOM解析原理:先把XML檔案整個載入到記憶體中,在逐個解析;

  SAX解析原理:通過自己建立的Handler類,去逐個分析遇到的每一個節點;(節點分析是從最外層向裡層逐個開始).

參考資料

  慕課網JessicaJiang老師視頻教程 連結:http://www.imooc.com/video/3789

JAVA解析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.