Является новым, использующим синтаксический анализатор SAX. Кто-нибудь скажет мне, как его запустить. И все, что требуется для его запуска (jdk). Могу ли я иметь саксовый парсер, который может анализировать как android xml, так и обычный xmlработает синтаксический анализатор Sax
ответ
Анализаторы SAX реализованы путем создания объекта ContentHandler
, который реализует определенные функции обратного вызова, соответствующие событиям, возникающим при анализе XML-документа. Например, вызывается метод startDocument
, когда парсер начинает разбор документа, и startElement
вызывается, когда он обнаруживает новый тег; Аналогичным образом вызываются endElement
, endDocument
и error
, когда парсер находит конец тега или документа или когда обнаружена некорректная последовательность.
This example показывает, как использовать парсер SAX. Ключ состоит в том, что класс MyHandler
расширяет класс DefaultHandler
(который реализует интерфейс ContentHandler
) и переопределяет пустые реализации каждого метода обратного вызова.
Подумайте об этом так: класс Java SAXParser
знает, как разбирать документы XML, но когда он обнаруживает интересные вещи, он полагается на некоторый класс обработчика, чтобы знать, что с ними делать. Класс DefaultHandler
- это вспомогательная реализация, которую вы можете расширить, чтобы обратить внимание на интересные вещи.
Вы можете использовать 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 {
}
}
}
THANKS maerics может рассказать мне, как разобрать локальный XML-файл .. тогда класс defaulthandler не требуется – apoorva