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

    打印结果

  • 相关阅读:
    Kivy / Buildozer VM Ubuntu不能连接到网络的问题解决
    创建PHP组件(composer)
    uniapp基础
    标准js和浏览器js的区别(uniapp)
    swagger api工具 PHP组件 ---- 1
    阿里云视频点播--事件通知
    直接网页打印出现a标签的地址解决办法
    阿里云视频直播--直播转点播--实践2
    阿里云视频直播--直播转点播--实践1
    阿里云视频直播--直播转点播
  • 原文地址:https://www.cnblogs.com/ssxblog/p/11331262.html
Copyright © 2020-2023  润新知