2010-04-27 83 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 { 
     } 

    } 

}