2010-04-27 159 views
0

剛剛使用SAX解析器。任何人都可以告訴我如何運行它。什麼都需要運行它(jdk)..我可以有一個薩克斯解析器,可以解析android xml和正常xml運行Sax解析器

回答

0

SAX解析器通過創建一個ContentHandler對象來實現,該對象實現與解析XML文檔時發生的事件相對應的某些回調函數。例如,當解析器開始解析文檔時調用startDocument方法,並且在發現新標籤時調用startElement;類似地,當解析器發現標籤或文檔的末尾或發現無效序列時,將調用endElement,endDocumenterror

This example顯示瞭如何使用SAX解析器。關鍵是MyHandler類擴展了DefaultHandler類(它實現了ContentHandler接口)並覆蓋了每個回調方法的空實現。

想想這樣:Java SAXParser類知道如何解析XML文檔,但是當它發現感興趣的事情時,它依賴於某個處理程序類來知道如何處理它們。 DefaultHandler類是一個幫助器實現,您可以擴展以關注有趣的事情。

+0

感謝maerics能告訴我如何解析本地的xml文件..然後defaulthandler類不是必需的 – apoorva 2010-04-28 04:28:40

0

如果需要,您可以直接使用ContentHandler(請參見下文)而不是擴展DefaultHandler。我相信這個級別的SAX解析在Android平臺上可用。

import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 

import org.xml.sax.XMLReader; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     SAXParserFactory spf = SAXParserFactory.newInstance(); 
     SAXParser sp = spf.newSAXParser(); 
     XMLReader xr = sp.getXMLReader(); 
     xr.setContentHandler(new MyContentHandler()); 
     xr.parse("input.xml"); 
    } 

    private static class MyContentHandler implements ContentHandler { 

     public void setDocumentLocator(Locator locator) { 
     } 

     public void startDocument() throws SAXException { 
     } 

     public void endDocument() throws SAXException { 
     } 

     public void startPrefixMapping(String prefix, String uri) 
       throws SAXException { 
     } 

     public void endPrefixMapping(String prefix) throws SAXException { 
     } 

     public void startElement(String uri, String localName, String qName, 
      System.out.println("START " + qName); 
     } 

     public void endElement(String uri, String localName, String qName) 
       throws SAXException { 
      System.out.println("END " + qName); 
     } 

     public void characters(char[] ch, int start, int length) 
       throws SAXException { 
      System.out.println(new String(ch, start, length)); 
     } 

     public void ignorableWhitespace(char[] ch, int start, int length) 
       throws SAXException { 
     } 

     public void processingInstruction(String target, String data) 
       throws SAXException { 
     } 

     public void skippedEntity(String name) throws SAXException { 
     } 

    } 

}