работает Sax parser - PullRequest
       23

работает Sax parser

0 голосов
/ 27 апреля 2010

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

Ответы [ 2 ]

0 голосов
/ 06 августа 2010

Вы можете использовать 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 {
        }

    }

}
0 голосов
/ 27 апреля 2010

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

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

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

...