Java SAX解析器
时间:2020-01-09 10:36:30 来源:igfitidea点击:
SAX是缩写,表示"用于XML的简单API"。 Java SAX XML解析器是面向流的XML解析器。它通过遍历XML并在遇到XML的某些结构元素时调用"侦听器"对象上的某些方法来工作。例如,它将为以下"事件"调用侦听器对象:
- startDocument - startElement - characters - comments - processing instructions - endElement - endDocument
该列表可能不完整,但是足够长,可以使我们了解其工作原理。让我们继续看看如何创建和使用Java SAX Parser。
SAXParserFactory factory = SAXParserFactory.newInstance(); try { InputStream xmlInput = new FileInputStream("theFile.xml"); SAXParser saxParser = factory.newSAXParser(); DefaultHandler handler = new SaxHandler(); saxParser.parse(xmlInput, handler); } catch (Throwable err) { err.printStackTrace (); }
当我们调用SAXParser.parse()方法时,SAX解析器将开始XML处理。作为参数传递给parse()方法的xmlInputInputStream
是读取XML的地方。
注意正在创建的SaxHandler
实例,并将其作为参数传递给parse()
方法。 SaxHandler类是org.xml.sax.helpers.DefaultHandler类的子类。 JDK随附了DefaultHandler类。
在处理XML时,SAXParser会调用DefaultHandler子类(此处为SaxHandler)实例中的方法,这些实例与解析器在XML文件中找到的内容相对应。要对这些方法调用做出反应,我们可以覆盖DefaultHandler
子类中的相应方法。这是一个例子:
public class SaxHandler extends DefaultHandler { public void startDocument() throws SAXException { } public void endDocument() throws SAXException { } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { } public void endElement(String uri, String localName, String qName) throws SAXException { } public void characters(char ch[], int start, int length) throws SAXException { } public void ignorableWhitespace(char ch[], int start, int length) throws SAXException { } }
DefaultHandler
子类的责任是通过这些方法从XML中提取任何必要的信息。如果需要基于XML文件构建对象图,则必须在DefaultHandler
子类内部构建该对象图。