• JAVA解析XML之SAX方式


    JAVA解析XML之SAX方式

    SAX解析xml步骤

      通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory
      通过SAXParserFactory实例的newSAXParser()方法返回SAXParser实例parser
      创建一个类继承DefaultHandle,重写方法进行业务处理并创建这个类的实例handle

    重写DefaultHandle类的方法

      startElement方法用来遍历xml文件的开始标签;

      endElement方法用来遍历xml文件的结束标签;

      startDocument方法用来标识解析开始;

      endDocument方法用来标识解析结束。

      characters方法用来获取text

      其中:参数qName 遍历到的元素的名称

         且同样会出现空白和换行的问题

    下面直接上代码

    <?xml version="1.0" encoding="UTF-8"?>
    <bookstore>
        <book id="1">
            <name>JAVA编程思想</name>
            <anthor>****</anthor>
            <year>2000</year>
        </book>
        <book id="2">
            <name>疯狂JAVA系列</name>
            <anthor>李刚</anthor>
            <price>89</price>
        </book>
    </bookstore>
    books.xml
    SAX.java
    package pers.zww.xml.handler;
    
    import javax.xml.stream.events.StartElement;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    public class SAXParserHandler extends DefaultHandler{
        int bookIndex=0;
        /*
         * 解析XML元素
         */
        @Override
        public void startElement(String uri, String localName, String qName,
                Attributes attributes) throws SAXException {
            super.startElement(uri, localName, qName, attributes);
            //开始解析book元素的属性
            
            if (qName.equals("book")) {
                bookIndex++;
                System.out.println("开始遍历第"+bookIndex+"本书");
                
    //            //已知book元素下的属性名称,根据属性名称获取属性值
    //            String value=attributes.getValue("id");
    //            System.out.println("book的属性值:"+value);
                //未知book元素下的属性名称及个数
                int num=attributes.getLength();
                for (int i = 0; i < num; i++) {
                    System.out.print("book元素的第"+(i+1)+"个属性名:"+attributes.getQName(i));
                    System.out.println(" && 属性值:"+attributes.getValue(i));
                    
                }
            }else if(!qName.equals("book")&&!qName.equals("bookstore")){
                System.out.print("节点名:"+qName);
                
            }else {
                
            }
        }
        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            // TODO Auto-generated method stub
            super.characters(ch, start, length);
            String val=new String(ch, start, length);
            if (!val.trim().equals("")) {
                System.out.println(" && 节点值:"+val);
            }
        }
        
        /*
         * 用来遍历xml文件的结束标签
         */
        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {
            super.endElement(uri, localName, qName);
            //是否针对一本书已经遍历结束
            if (qName.equals("book")) {
                System.out.println("=======================");
            }
        }
        
        /*
         * 用来标志解析开始
         */
        @Override
        public void startDocument() throws SAXException {
            // TODO Auto-generated method stub
            super.startDocument();
            //第一行开始
            System.out.println("SAX解析开始");
        }
        
        /*
         * 用来标志解析结束
         */
        @Override
        public void endDocument() throws SAXException {
            // TODO Auto-generated method stub
            super.endDocument();
            //最后一行结束
            System.out.println("SAX解析结束");
        }
    }
    SAXParserHandler.java

    SAX与DOM对比

      DOM解析原理:先把XML文件整个加载到内存中,在逐个解析;

      SAX解析原理:通过自己创建的Handler类,去逐个分析遇到的每一个节点;(节点分析是从最外层向里层逐个开始).

    参考资料

      慕课网JessicaJiang老师视频教程 点击链接

  • 相关阅读:
    Unity编译Android的原理解析和apk打包分析
    TokuDB性能测试报告
    一起脱去小程序的外套和内衣
    go单元测试进阶篇
    小程序发布后最全解析!
    部署在腾讯云的公益网站遭受了一次CC攻击
    基于Http原理实现Android的图片上传和表单提交
    腾讯云TCCE培训认证 精彩的第一次
    【腾讯云的1001种玩法】在腾讯云上创建您的SQL Cluster(5)
    腾讯云容器服务的滚动升级使用简介
  • 原文地址:https://www.cnblogs.com/zhaoww/p/4714094.html
Copyright © 2020-2023  润新知