XML的SAX解析
程序员文章站
2022-06-16 12:13:28
...
SAX是一个顺序执行,事件驱动的解析方法(事件驱动,简单地说就是你点什么按钮(即产生什么事件))
SAX的工作原理;
1.在文档的开始和结束时触发文档处理事件。 2.在文档内每一XML元素接受解析的前后触发元素事件。 3.任何元数据通常由单独的事件处理 4.在处理文档的DTD或Schema时产生DTD或Schema事件。 5.产生错误事件用来通知主机应用程序解析错误。
DOM解析博客地址连接:DOM解析
SAX与DOM解析的优点;SAX解析适合较大的XML文件解析,DOM可以增加节点
SAX解析的主要方法;
1,创建解析工厂实例
2,创建解析工厂
3,解析xml
startElement() 回调在每次 SAX 解析器遇到元素的起始标记时被调用
characters() 回调为字符数据所调用
endElement() 为元素的结束标记所调用
DefaultHandler类
JAVA解析xml文档;
代码如下
代码如下
package SAX解析;
import java.util.ArrayList;
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;
/**
* SAX解析 1.创建解析工厂
* 2,创建解析工厂实例
* 3,工厂实例来解析XML(本地文件,文件解析器)
*
* @author Administrator
*/
public class SAXDemo {
ArrayList<Student> list;
Student stu;
String strValue;
public static void main(String[] args) throws Exception {
SAXDemo demo = new SAXDemo();
demo.sefa();
}
public void sefa() throws Exception {
//开始时间
long l1=System.currentTimeMillis();
// 创建工厂实例
SAXParserFactory factory = SAXParserFactory.newInstance();
// 创建解析工厂
SAXParser parser = factory.newSAXParser();
String f = "C:\\Users\\Administrator\\Desktop\\xml\\student2.xml";
MyDefaultHandler hb = new MyDefaultHandler();
// 解析XML
parser.parse(f, hb);
long l2= System.currentTimeMillis();
long end =l2-l1;
//1818ms
System.out.println("解析时间:"+end+"ms");
}
/**
* 创建外部类,解析XML startDocument开始读取文本 startElement开始读取元素
*/
class MyDefaultHandler extends DefaultHandler {
// 开始读取文本
public void startDocument() throws SAXException {
System.out.println("开始解析..");
list = new ArrayList<Student>();
}
// 结束文本读取
public void endDocument() throws SAXException {
// 遍历队列
for (Student strs : list) {
System.out.println(strs);
}
System.out.println("解析完成..");
}
// 开始读取元素
public void startElement(String uri, String localName, String qName,
Attributes attr) throws SAXException {
if (qName.equals("stu")) {
stu = new Student();
list.add(stu);
String nums = attr.getValue("num");
String nos = attr.getValue("no");
if (nums != null) {
stu.num = Integer.parseInt(nums);
}
if (nos != null) {
stu.no = Integer.parseInt(nos);
}
}
}
// 结束元素的读取
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (qName.equals("name")) {
stu.name = strValue;
}
if (qName.equals("sex")) {
stu.sex = strValue;
}
if (qName.equals("cla")) {
stu.cla = strValue;
}
}
// 读取字符串
public void characters(char ch[], int start, int length)
throws SAXException {
// 创建字符串
strValue = new String(ch, start, length);
}
}
}
上一篇: 请教这段rewrite如何写