Java解析XML的常用几种方法(二) SAX的方式

如题所述

SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;代码如下:package com.davidw.xml.sax;import java.io.FileInputStream;
import java.io.InputStream;
import java.text.AttributedCharacterIterator.Attribute;import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;import com.davidw.xml.dom.XmlDocument; public class SaxDemo implements XmlDocument{ public SaxDemo(){}@Overridepublic void createXML(String fileName) {
} @Override
public void parseXML(String fileName) {
SAXParserFactory saxpf = SAXParserFactory.newInstance();try{SAXParser parser = saxpf.newSAXParser();
InputStream is = new FileInputStream(fileName);
parser.parse(is, new MySAXHandler());
}catch (Exception e) {
e.printStackTrace();}}}class MySAXHandler extends DefaultHandler{
boolean hasAttr=false;
Attributes attributes = null;
public void startDocument() throws SAXException{
System.out.println("文档开始打印!");}public void endDocument() throws SAXException{
System.out.println("文档解析结束!");}public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException{
if(qName.equals("employees")){return;}if(qName.equals("employee")){
System.out.println(qName);}if(attributes.getLength() >0){
this.attributes = attributes;
this.hasAttr = true;}}public void endElement(String uri,String localName,String qName) throws SAXException{
if(hasAttr && (attributes != null)){
for(int i=0;i<attributes.getLength();i++){
System.out.println(attributes.getQName(0)
+attributes.getValue(0));}}} @Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
System.out.println(new String(ch,start,length));}}相对与DOM来说,看着比较复杂,但是这种方法解析出来的结果相对比较正确。但是解析的还是存在少量的问题,例如结果中包含有空格之类的东东。
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网