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