zoukankan      html  css  js  c++  java
  • Java SAX解析

    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());
            }
        }
    }

    打印结果

  • 相关阅读:
    IIS7,iis6 管道模型及处理差异
    web相关基础知识4
    web相关基础知识3
    web相关基础知识2
    web相关基础知识1
    有关于PHP的基础知识
    软件工程课程建议
    结对编程-四则运算
    结对编程
    关于问卷调查的心得体会
  • 原文地址:https://www.cnblogs.com/ssxblog/p/11331262.html
Copyright © 2011-2022 走看看