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子类内部构建该对象图。

