2010-04-27 5 views
0

Является новым, использующим синтаксический анализатор SAX. Кто-нибудь скажет мне, как его запустить. И все, что требуется для его запуска (jdk). Могу ли я иметь саксовый парсер, который может анализировать как android xml, так и обычный xmlработает синтаксический анализатор Sax

ответ

0

Анализаторы SAX реализованы путем создания объекта ContentHandler, который реализует определенные функции обратного вызова, соответствующие событиям, возникающим при анализе XML-документа. Например, вызывается метод startDocument, когда парсер начинает разбор документа, и startElement вызывается, когда он обнаруживает новый тег; Аналогичным образом вызываются endElement, endDocument и error, когда парсер находит конец тега или документа или когда обнаружена некорректная последовательность.

This example показывает, как использовать парсер SAX. Ключ состоит в том, что класс MyHandler расширяет класс DefaultHandler (который реализует интерфейс ContentHandler) и переопределяет пустые реализации каждого метода обратного вызова.

Подумайте об этом так: класс Java SAXParser знает, как разбирать документы XML, но когда он обнаруживает интересные вещи, он полагается на некоторый класс обработчика, чтобы знать, что с ними делать. Класс DefaultHandler - это вспомогательная реализация, которую вы можете расширить, чтобы обратить внимание на интересные вещи.

+0

THANKS maerics может рассказать мне, как разобрать локальный XML-файл .. тогда класс defaulthandler не требуется – apoorva

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 { 
     } 

    } 

}