1.01SAX解析器及工作原理
SAX(Simple API for XML)提供了解析XML文件的API,和DOM解析器比,不用将XML文件读入内存建立树状结
构。SAX的 核心是事件处理机制,SAX解析器调用: parse(File f,DefaultHandler dh);
解析XML文件,并向该方法传递一个事件处理器。SAX解析器在解析XML文件是过程中,根据从文件中解析出来
的数据产生相应的事件,并报告这个事件给事件处理器,事件处理器就会处理所发现的数据,parse方法必须等
待事件处理完毕后再继续解析文件,报告下一个事件,因此,对于SAX来说,较DOM解析器更高的效率,事件处
理器每次在内存中只保留对一个事件的处理,处理完毕后即可释放该处理过程所占用的内存。
使用SAX解析器的步骤如下:
1: SAXParserFactory factory= SAXParserFactory.newInstance();
2: SAXParser saxParser = factory.newSAXParser();
同时要使用到javax.xml.parsers这个包。
如果想要SAXParserFactory产生的SAX解析支持名称空间的话,
可让factory对象调用setNamespaceAware(true)。
1.02:事件处理器
SAX解析器使用下述方法解析XML文件:
public void parse(File,DefaultHandler) throws SAXException,IOException;
public void parse(InputStream,DefaultHandler) throws SAXException,IOException;
public void parse(String,DefaultHandler) throws SAXException,IOException;
1.03:事件的产生与处理
SAX解析器的核心是事件处理机制,当SAX解析器调用parse()方法解析XML文件时,事件处理器会根据所产生的
事件调用相应的方法来处理发现的数据,在编写程序时,需要使用DefaultHandler类的子类创建一个事件处理
器,当处理器对报告的事件不感性趣时,就直接调用父类的方法,采用默认的处理方法,当处理器对报告的事件
感性趣时,子类可以重写父 类的某些方法,调用重写的方法,以便处理器可以具体的处理解析器报告的数据。
1.04:文件的开始与结束
当解析器开始解析XML文件时,就会报告"文件开始"事件,事件给事件处理器,然后再陆续地报告其他的事件,
比如:"开始标记","文本事件",最后再报告"文件结束"事件。解析器报告"文件开始"事件,事件处理器就会调用:
startDocument()方法,解析器报告"文件结束"事件,事件处理器会调用endDocument()方法,解析器在解析XML
文件的过程中,只能报告一次"文件开始"和"文件结束"事件,换句话说,也只会调用一次startDocument()和
endDocument()方法各一次。
1.05:XML中的处理指令
XML中的处理指令比较特殊,它们不属性标记,它们为XML文件规定了特殊的规则,例如:
<?xml version="1.0" encoding="UTF-8"?>
处理指令规定XML文件必须使和UTF-8编码来保存和解析,解析器不报告XML声明给事件处理器,即不会报告上述
指令。 但如下XML指令会报告给事件处理器:<?xml-styleshe