Parsing 运行Sax解析器

Parsing 运行Sax解析器,parsing,compilation,sax,Parsing,Compilation,Sax,我不熟悉使用SAX解析器。有人能告诉我如何运行它吗?运行它需要什么(jdk)…我可以拥有一个sax解析器,它可以解析android xml和普通xmlsax解析器是通过创建一个ContentHandler对象来实现的,该对象实现了与解析xml文档时发生的事件相对应的某些回调函数。例如,解析器开始解析文档时调用startDocument方法,发现新标记时调用startElement;类似地,当解析器找到标记或文档的结尾或发现无效序列时,将调用endElement、endDocument和error

我不熟悉使用SAX解析器。有人能告诉我如何运行它吗?运行它需要什么(jdk)…我可以拥有一个sax解析器,它可以解析android xml和普通xml

sax解析器是通过创建一个
ContentHandler
对象来实现的,该对象实现了与解析xml文档时发生的事件相对应的某些回调函数。例如,解析器开始解析文档时调用
startDocument
方法,发现新标记时调用
startElement
;类似地,当解析器找到标记或文档的结尾或发现无效序列时,将调用
endElement
endDocument
error

演示如何使用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 {
        }

    }

}

谢谢maerics你能告诉我如何解析本地xml文件吗..那么defaulthandler类就不是必需的了