紫蘭州

          紫蘭州

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            4 隨筆 :: 0 文章 :: 1 評論 :: 0 Trackbacks

          Java解析xml之SAX,Java,解析,xml,SAX

           

          在上一節介紹了javaDOM的方式解析XML,本文用的到test.xml,請參考上節

           

          -------------------------------------------

          1.Java解析xmlDOM

          --------------------------------------------------------------------------

          SAX不用將整個文檔加載到內存,基于事件驅動的API(Observer模式),用戶只需要注冊自己感興趣的事件即可。SAX提供EntityResolver, DTDHandler, ContentHandler, ErrorHandler接口,分別用于監聽解析實體事件、DTD處理事件、正文處理事件和處理出錯事件,與AWT類似,SAX還提供了一個對這4個接口默認的類DefaultHandler(這里的默認實現,其實就是一個空方法),一般只要繼承DefaultHandler,重寫自己感興趣的事件即可。

            1package test.xml;    
            2   
            3import java.io.IOException;    
            4import java.io.InputStream;    
            5   
            6import javax.xml.parsers.ParserConfigurationException;    
            7import javax.xml.parsers.SAXParser;    
            8import javax.xml.parsers.SAXParserFactory;    
            9   
           10import org.xml.sax.Attributes;    
           11import org.xml.sax.InputSource;    
           12import org.xml.sax.Locator;    
           13import org.xml.sax.SAXException;    
           14import org.xml.sax.SAXParseException;    
           15import org.xml.sax.helpers.DefaultHandler;    
           16   
           17/**   
           18 *   
           19 * @author whwang   
           20 */
             
           21public class TestSAX {    
           22   
           23    public static void main(String[] args) {    
           24        read();    
           25        write();    
           26    }
              
           27        
           28    public static void read() {    
           29        try {    
           30            SAXParserFactory factory = SAXParserFactory.newInstance();    
           31            SAXParser parser = factory.newSAXParser();    
           32            InputStream in = TestSAX.class.getClassLoader().getResourceAsStream("test.xml");    
           33            parser.parse(in, new MyHandler());    
           34        }
           catch (ParserConfigurationException e) {    
           35            e.printStackTrace();    
           36        }
           catch (SAXException e) {    
           37            e.printStackTrace();    
           38        }
           catch (IOException e) {    
           39            e.printStackTrace();    
           40        }
              
           41    }
              
           42        
           43    public static void write() {    
           44        System.err.println("純SAX對于寫操作無能為力");    
           45    }
              
           46        
           47}
              
           48   
           49// 重寫對自己感興趣的事件處理方法    
           50class MyHandler extends DefaultHandler {    
           51   
           52    @Override   
           53    public InputSource resolveEntity(String publicId, String systemId)    
           54            throws IOException, SAXException {    
           55        return super.resolveEntity(publicId, systemId);    
           56    }
              
           57   
           58    @Override   
           59    public void notationDecl(String name, String publicId, String systemId)    
           60            throws SAXException {    
           61        super.notationDecl(name, publicId, systemId);    
           62    }
              
           63   
           64    @Override   
           65    public void unparsedEntityDecl(String name, String publicId,    
           66            String systemId, String notationName) throws SAXException {    
           67        super.unparsedEntityDecl(name, publicId, systemId, notationName);    
           68    }
              
           69   
           70    @Override   
           71    public void setDocumentLocator(Locator locator) {    
           72        super.setDocumentLocator(locator);    
           73    }
              
           74   
           75    @Override   
           76    public void startDocument() throws SAXException {    
           77        System.err.println("開始解析文檔");    
           78    }
              
           79   
           80    @Override   
           81    public void endDocument() throws SAXException {    
           82        System.err.println("解析結束");    
           83    }
              
           84   
           85    @Override   
           86    public void startPrefixMapping(String prefix, String uri)    
           87            throws SAXException {    
           88        super.startPrefixMapping(prefix, uri);    
           89    }
              
           90   
           91    @Override   
           92    public void endPrefixMapping(String prefix) throws SAXException {    
           93        super.endPrefixMapping(prefix);    
           94    }
              
           95   
           96    @Override   
           97    public void startElement(String uri, String localName, String qName,    
           98            Attributes attributes) throws SAXException {    
           99        System.err.print("Element: " + qName + ", attr: ");    
          100        print(attributes);    
          101    }
              
          102   
          103    @Override   
          104    public void endElement(String uri, String localName, String qName)    
          105            throws SAXException {    
          106        super.endElement(uri, localName, qName);    
          107    }
              
          108   
          109    @Override   
          110    public void characters(char[] ch, int start, int length)    
          111            throws SAXException {    
          112        super.characters(ch, start, length);    
          113    }
              
          114   
          115    @Override   
          116    public void ignorableWhitespace(char[] ch, int start, int length)    
          117            throws SAXException {    
          118        super.ignorableWhitespace(ch, start, length);    
          119    }
              
          120   
          121    @Override   
          122    public void processingInstruction(String target, String data)    
          123            throws SAXException {    
          124        super.processingInstruction(target, data);    
          125    }
              
          126   
          127    @Override   
          128    public void skippedEntity(String name) throws SAXException {    
          129        super.skippedEntity(name);    
          130    }
              
          131   
          132    @Override   
          133    public void warning(SAXParseException e) throws SAXException {    
          134        super.warning(e);    
          135    }
              
          136   
          137    @Override   
          138    public void error(SAXParseException e) throws SAXException {    
          139        super.error(e);    
          140    }
              
          141   
          142    @Override   
          143    public void fatalError(SAXParseException e) throws SAXException {    
          144        super.fatalError(e);    
          145    }
              
          146        
          147    private void print(Attributes attrs) {    
          148        if (attrs == nullreturn;    
          149        System.err.print("[");    
          150        for (int i = 0; i < attrs.getLength(); i++{    
          151            System.err.print(attrs.getQName(i) + " = " + attrs.getValue(i));    
          152            if (i != attrs.getLength() - 1{    
          153                System.err.print("");    
          154            }
              
          155        }
              
          156        System.err.println("]");    
          157    }
              
          158}
             
          159


          posted on 2012-08-21 11:14 紫蘭州 閱讀(290) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 越西县| 罗山县| 嘉禾县| 习水县| 仪陇县| 郎溪县| 察隅县| 南阳市| 轮台县| 太保市| 卓资县| 惠东县| 大宁县| 禹城市| 水富县| 喀什市| 南投市| 陕西省| 都江堰市| 昌吉市| 西乡县| 永宁县| 龙口市| 吉水县| 大宁县| 白银市| 互助| 安乡县| 永和县| 开平市| 张北县| 怀集县| 乐清市| 松潘县| 成安县| 黑龙江省| 芒康县| 盐城市| 隆子县| 石嘴山市| 江源县|