运行Sax解析器

时间:2010-04-27 04:24:18

标签: parsing compilation sax

我很擅长使用SAX解析器。任何人都可以告诉我如何运行它。以及运行它需要什么(jdk)..我可以有一个可以解析android xml和普通xml的sax解析器

2 个答案:

答案 0 :(得分:0)

SAX解析器是通过创建ContentHandler对象来实现的,该对象实现某些回调函数,这些回调函数对应于解析XML文档时发生的事件。例如,当解析器开始解析文档时调用startDocument方法,并在发现新标记时调用startElement;同样,当解析器找到标记或文档的末尾,或者发现无效序列时,会调用endElementendDocumenterror

This example显示了如何使用SAX解析器。关键是MyHandler类扩展了DefaultHandler类(实现了ContentHandler接口)并覆盖了每个回调方法的空实现。

以这种方式思考:Java SAXParser类知道如何解析XML文档,但是当它发现感兴趣的东西时,它依赖于某个处理程序类来知道如何处理它们。 DefaultHandler类是一个帮助器实现,您可以扩展它以关注有趣的事情。

答案 1 :(得分: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 {
        }

    }

}