• 4月19日学习日志


    今天学习了SAX解析XML数据。

    SAX解析类:SaxHelper.java:

    public class SaxHelper extends DefaultHandler {
        private Person person;
        private ArrayList<Person> persons;
        //当前解析的元素标签
        private String tagName = null;
    
        /**
         * 当读取到文档开始标志是触发,通常在这里完成一些初始化操作
         */
        @Override
        public void startDocument() throws SAXException {
            this.persons = new ArrayList<Person>();
            Log.i("SAX", "读取到文档头,开始解析xml");
        }
    
    
        /**
         * 读到一个开始标签时调用,第二个参数为标签名,最后一个参数为属性数组
         */
        @Override
        public void startElement(String uri, String localName, String qName,
                                 Attributes attributes) throws SAXException {
            if (localName.equals("person")) {
                person = new Person();
                person.setId(Integer.parseInt(attributes.getValue("id")));
                Log.i("SAX", "开始处理person元素~");
            }
            this.tagName = localName;
        }
    
    
        /**
         * 读到到内容,第一个参数为字符串内容,后面依次为起始位置与长度
         */
    
        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            //判断当前标签是否有效
            if (this.tagName != null) {
                String data = new String(ch, start, length);
                //读取标签中的内容
                if (this.tagName.equals("name")) {
                    this.person.setName(data);
                    Log.i("SAX", "处理name元素内容");
                } else if (this.tagName.equals("age")) {
                    this.person.setAge(Integer.parseInt(data));
                    Log.i("SAX", "处理age元素内容");
                }
    
            }
    
        }
    
        /**
         * 处理元素结束时触发,这里将对象添加到结合中
         */
        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {
            if (localName.equals("person")) {
                this.persons.add(person);
                person = null;
                Log.i("SAX", "处理person元素结束~");
            }
            this.tagName = null;
        }
    
        /**
         * 读取到文档结尾时触发,
         */
        @Override
        public void endDocument() throws SAXException {
            super.endDocument();
            Log.i("SAX", "读取到文档尾,xml解析结束");
        }
    
        //获取persons集合
        public ArrayList<Person> getPersons() {
            return persons;
        }
    
    }

    然后我们在MainActivity.java中写上写上这样一个方法,然后要解析XML的时候调用下 就好了~

    private ArrayList<Person> readxmlForSAX() throws Exception {
        //获取文件资源建立输入流对象
        InputStream is = getAssets().open("person1.xml");
        //①创建XML解析处理器
        SaxHelper ss = new SaxHelper();
        //②得到SAX解析工厂
        SAXParserFactory factory = SAXParserFactory.newInstance();
        //③创建SAX解析器
        SAXParser parser = factory.newSAXParser();
        //④将xml解析处理器分配给解析器,对文档进行解析,将事件发送给处理器
        parser.parse(is, ss);
        is.close();
        return ss.getPersons();
    }
  • 相关阅读:
    [资料]PHP中的__autoload
    [转]php 5.3新增的闭包语法介绍function() use() {}
    [资料]PHP中的ReflectionClass
    [资料]PHP中的命名空间
    Mysql Event
    PHP转换成对像
    [转]Win7自带便签怎么恢复内容
    [转]Windows7便笺妙用
    [转]ASP.NET下MVC1.0>2.0>3.0>4.0
    PHP类动态属性问题
  • 原文地址:https://www.cnblogs.com/20193925zxt/p/14909920.html
Copyright © 2020-2023  润新知