代码段1:
startupData = new StartupData();
/* 设定自定义的MyHandler给XMLReader */
StartupXMLHandler startupDataXMLHandler = new StartupXMLHandler();
startupDataXMLHandler.setData(startupData);
/* 产生SAXParser对象 */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
/* 产生XMLReader对象 */
XMLReader xmlReader = sp.getXMLReader();//SAXParserFactory.newInstance().newSAXParser().getXMLReader();
xmlReader.setContentHandler(startupDataXMLHandler);
xmlReader.parse(input);
发现:关键有三个类:
(1)StartupData
(2) StartUPXMLHandler
(3) XMLReader
其中(1)是存放解析XML结果的类,没啥啰嗦的。
(2)看下面这段代码:
SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个 文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态 性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;
public class StartUPXMLHandler extends DefaultHandler{
@Override
public void startDocument() throws SAXException{
System.out.println("开始解析!");
}
@Override
public void endDocument() throws SAXException{
System.out.println("解析完成!");
}
@Override
public void startElement(String uri, String localName, String qName,Attributes atts) throws SAXException {
System.out.println("元素名:"+qName);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException{
System.out.println("对"+qName+"的解析完成!");
}
}