sax解析 一行一行的解析,针对数据量较大的
dom解析 将整个数据加载,针对数据较小的
sax步骤
1、获得解析工厂 SAXParserFactory
2、工厂获取解析器 SAXParser
3、加载文档Document注册处理器
1、首先写一个xml
person.xml
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person>
<name>至尊宝</name>
<age>90000</age>
</person>
<person>
<name>紫霞</name>
<age>10000</age>
</person>
</persons>
2、Persond类(准备)
Persond.java
package xml;
/*
* sax解析 一行一行的解析,针对数据量较大的
* dom解析 将整个数据加载,针对数据较小的
*
* sax步骤
* 1、获得解析工厂 SAXParserFactory
* 2、工厂获取解析器 SAXParser
* 3、加载文档Document注册处理器
*/
public class Persond {
private String name;
private int age;
public Persond() {
}
public Persond(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3、注册处理器(存储对象)
PersonHandler.java
package xml;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/*
* 存储对象
*/
public class PersonHandler extends DefaultHandler {
private List<Persond> persons;
private Persond person;
private String tag; //记录标签名
@Override
public void startDocument() throws SAXException {
// System.out.println("处理文档开始");
persons=new ArrayList<Persond>();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
System.out.println("开始一个元素"+qName);
if(null!=qName) {
tag=qName;
}
if(null!=qName&&qName.equals("person")) {
person=new Persond();
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String str=new String(ch,start,length);
if(null!=tag&&tag.equals("name")) {
// System.out.println(new String(ch,start,length));
//存数据
person.setName(str);
}else if(null!=tag&&tag.equals("age")) {
Integer age=Integer.valueOf(str);
person.setAge(age);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// System.out.println("结束一个元素"+qName);
if(qName.equals("person")) {
this.persons.add(person);
}
tag=null;
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("文档处理结束");
}
public List<Persond> getPersons() {
return persons;
}
public void setPersons(List<Persond> persons) {
this.persons = persons;
}
}
4、正式解析
ParseDemo01.java
package xml;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
public class ParseDemo01 {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//1、获取解析工厂 SAXParserFactory是protect类型,所以用他的静态方法
SAXParserFactory factory=SAXParserFactory.newInstance();
//2、从解析工厂获取解析器
SAXParser parse=factory.newSAXParser();
//3、加载文档Document注册处理器
//4、编写处理器
PersonHandler handler=new PersonHandler();
parse.parse(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("xml/person.xml")
, handler);
List<Persond> personds=handler.getPersons(); //得到一个List对象,里面包含两个Persond类型的对象<person1,person2>
for(Persond p:personds) {
System.out.println(p.getName()+"-->"+p.getAge());
}
}
}
打印结果

来源:https://www.cnblogs.com/ssxblog/p/11331262.html