上一篇谢了解析原理和过程,这里应用代码直观认识这个原理:
新建demo1类:
import java.io.file;
import javax.xml.parsers.saxparser;
import javax.xml.parsers.saxparserfactory;
/**
* 第一个sax读取xml文件程序
* @author apple
*
*/
public class demo1 {
public static void main(string[] args) throws exception{
//1.创建saxparser对象
//
saxparser parser = saxparserfactory.newinstance().newsaxparser();
//2.调用parse方法
/**
* 参数一: xml文档
* 参数二: defaulthandler的子类,默认基类,因此没法new。用子类
*/
parser.parse(new file("./src/contact.xml"), new mydefaulthandler());
//使用指定的 defaulthandler 将指定文件的内容解析为 xml。这里一定要自定义mydefaulthandler类,且在里面实现业务逻辑。不理解先死记住这种模式。
}
}
接着给出自定义继承defaulthandler的mydefaulthandler
import org.xml.sax.attributes;
import org.xml.sax.saxexception;
import org.xml.sax.helpers.defaulthandler;
/**
* sax处理程序(如何解析xml文档)
* @author apple
*
*/
public class mydefaulthandler extends defaulthandler {
/**
* 开始文档时调用
*/
@override
public void startdocument() throws saxexception {
system.out.println("mydefaulthandler.startdocument()");
}
/**
* 开始标签时调用
* @param qname: 表示开始标签的标签名
* @param attributes: 表示开始标签内包含的(属性)【列表】
*/
@override
public void startelement(string uri, string localname, string qname,
attributes attributes) throws saxexception {
system.out.println("mydefaulthandler.startelement()-->"+qname);
}
/**
* 结束标签时调用
* @param qname: 结束标签的标签名称
*/
@override
public void endelement(string uri, string localname, string qname)
throws saxexception {
system.out.println("mydefaulthandler.endelement()-->"+qname);
}
/**
* 读到文本内容的时调用
* @param ch: 表示当前读完的所有文本内容
* @param start: 表示当前文本内容的开始位置
* @param length: 表示当前文本内容的长度
*/
@override
public void characters(char[] ch, int start, int length)
throws saxexception {
//得到当前文本内容
string content = new string(ch,start,length);
system.out.println("mydefaulthandler.characters()-->"+content);
}
/**
* 结束文档时调用
*/
@override
public void enddocument() throws saxexception {
system.out.println("mydefaulthandler.enddocument()");
}
}
打印输出,更直观认识sax解析过程。下一篇给出应用案例
以上就是xml解析之sax解析过程代码详解的内容。