XML复习之SAX 方式解析 XML
程序员文章站
2022-03-26 12:35:06
...
今日目录
1、SAX 方式解析 XML 原理
2、SAX 方式解析 XML 示例
一、SAX 方式解析 XML 原理
SAX 的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)、开始与结束、文档(document)结束等地方时通知事件处理函数、由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
优点:消耗资源比较少;适合大文件解析;
缺点:只能读取不能修改;开发复杂;
优点:消耗资源比较少;适合大文件解析;
缺点:只能读取不能修改;开发复杂;
二、SAX 方式解析 XML 示例
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import model.Student;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import java.util.ArrayList;
import java.util.List;
public class SAX02 extends DefaultHandler{
private List<Student> students=null;
private Student student=null;
private String preTag=null;
@Override
public void startDocument() throws SAXException {
System.out.print("开始读取文档");
students=new ArrayList<Student>();
}
@Override
public void endDocument() throws SAXException {
System.out.println("\n结束读取文档");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("student".equals(qName)){
student=new Student();
student.setId(attributes.getValue(0));
}
preTag=qName;
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if("student".equals(qName)){
students.add(student);
student=null;
}
preTag=null;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(preTag!=null){
String content=new String(ch,start,length);
if("name".equals(preTag)){
student.setName(content);
}else if("sex".equals(preTag)){
student.setSex(content);
}else if("age".equals(preTag)){
student.setAge(Integer.parseInt(content));
}
}
}
public static void main(String[] args) throws Exception{
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser parser=factory.newSAXParser();
SAX02 sax02=new SAX02();
parser.parse("src/students.xml", sax02);
for(Student s:sax02.students){
System.out.println(s);
}
}
}
添加小编微信可以获取免费资源,二维码
要用到的工具,关注公众号直接免费获取: