• WebServer Project-02-XML解析


    XML:Extensible Markup Language,可扩展标记语言,左卫门数据的一种存储格式或用于存储软件的参数,程序解析此配置文件,就可以达到不修改代码就能更改程序的目的。

    <?xml version="1.0" encoding="UTF-8"?>
    <persons>
        <person>
            <name>至尊宝</name>>
            <age>9000</age>
        </person>
        <person>
            <name>白晶晶</name>>
            <age>2000</age>
        </person>
    </persons>
    
    
    package server.study;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    import java.io.IOException;
    
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    /**
     * 熟悉SAX解析流程
     * Created by 16114 on 2019/8/22.
     *
     */
    public class XmlTest01 {
        public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
            //SAX解析
            //1.获取解析工厂
            SAXParserFactory factory = SAXParserFactory.newInstance();
            //2.从解析工厂获取解析器
            SAXParser parser = factory.newSAXParser();
            //3.编写处理器
    
    
            //4.加载文档Document注册处理器
            PHandler handler = new PHandler();
            //5.解析
            parser.parse(Thread.currentThread().getContextClassLoader()
                            .getResourceAsStream("server/study/p.xml") ,handler);
        }
    }
    class PHandler extends DefaultHandler{
        @Override
        public void startDocument() throws SAXException {
            System.out.println("---解析文档开始---");
        }
    
        @Override
        public void endDocument() throws SAXException {
            System.out.println("---解析文档结束---");
        }
    
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            String contents = new String(ch,start,length).trim();
            if (contents.length() > 0) {
                System.out.println("内容为-->" + contents);
            } else {
                System.out.println("内容为-->" + "空");
            }
        }
    
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
           // super.startElement(uri, localName, qName, attributes);
            System.out.println(qName+ "--->解析开始 ");
        }
    
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            //super.endElement(uri, localName, qName);
            System.out.println(qName+ "--->解析结束");
        }
    }
    
    package server.study;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    /**
     * 熟悉SAX解析流程
     * Created by 16114 on 2019/8/22.
     *
     */
    public class XmlTest02 {
        public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
            //SAX解析
            //1.获取解析工厂
            SAXParserFactory factory = SAXParserFactory.newInstance();
            //2.从解析工厂获取解析器
            SAXParser parser = factory.newSAXParser();
            //3.编写处理器
    
    
            //4.加载文档Document注册处理器
            PersonHandler handler = new PersonHandler();
            //5.解析
            parser.parse(Thread.currentThread().getContextClassLoader()
                    .getResourceAsStream("server/study/p.xml") ,handler);
            //获取数据
            List<Person> persons = handler.getPersons();
            for (Person p:persons
                 ) {
                System.out.println(p.getName()+"-->"+p.getAge());
            }
        }
    }
    class PersonHandler extends DefaultHandler{
        private List<Person> persons;
        private Person person;
        private String tag; //存储操作标签
    
        public List<Person> getPersons() {
            return persons;
        }
    
        @Override
        public void startDocument() throws SAXException {
            persons = new ArrayList<Person>();
            //System.out.println("---解析文档开始---");
        }
    
        @Override
        public void endDocument() throws SAXException {
            //System.out.println("---解析文档结束---");
        }
    
    
    
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            // super.startElement(uri, localName, qName, attributes);
            System.out.println(qName+ "--->解析开始 ");
    
            if (null != qName){
                tag = qName; //存储
                if (tag.equals("person")){
                    person = new Person();
                }
            }
        }
    
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            String contents = new String(ch,start,length).trim();
            if (null != tag) { //处理了空
                if (tag.equals("name")) {
                    person.setName(contents);
                } else if (tag.equals("age")) {
                    if (contents.length() > 0) {
                        person.setAge(Integer.valueOf(contents));
                    }
                }
            }
        }
    
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            //super.endElement(uri, localName, qName);
            System.out.println(qName+ "--->解析结束");
            if (null != qName) {
                if (qName.equals("person")) {
                    persons.add(person);
                }
            }
            tag = null;
        }
    }
    
  • 相关阅读:
    常见设计模式,总结的不错(转)
    mysql查询当前时间,一天内,一周,一个月内的sql语句
    PBOC金融IC卡,卡片与终端交互的13个步骤,简介-第一组(转)
    金融IC卡 ARQC和ARPC计算方法和实例(转)
    如何解决结果由block返回情况下的同步问题(转)
    linux进程编程:子进程创建及执行函数简介
    exec函数族实例解析
    C语言中system()函数的用法总结(转)
    关于JSPatch热修复
    做个这样的APP要多久?[转]
  • 原文地址:https://www.cnblogs.com/Roni-i/p/11397790.html
Copyright © 2020-2023  润新知