• xml文档读取SAX


    由于dom采用的是将xml文档加载入内存进行处理的方式,如果xml文档较大,则会导致加载时间过长,效率降低的情况,因此,sun公司在JAXP中又添加了对SAX的支持;

    SAX,全称Simple API for XML,既是一种接口,也是一种软件包。它是一种XML解析的替代方法。SAX不同于DOM解析,它逐行扫描文档,一边扫描一边解析。由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档的解析是个巨大优势。

    SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分“解析器”“事件处理器”

    • 解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。
    • 解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
    • 事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理. 
    public class SAX_xml {
        public static void main(String[] args) throws SAXException, ParserConfigurationException, IOException
        {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();
            parser.parse(new File("src/package1112/books.xml"), new DefaultHandler(){});
        }
    }    

    这段代码为一个主类,主类里面只有一个主函数。

    主函数整体看见就三条语句:

    第一句:声明一个工厂

    第二句:声明一个解析器

    第三句:解析xml文档(内含两个参数,第一个是要解析的xml文档,第二个是)

    第三句展开

    第一个函数:

    public void startDocument() throws SAXException
    {
        System.out.println("文档开始读取……");
    }

    第二个函数:(输出起始标签,该标签的键值对(属性名:属性值))

    public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException
    {
          System.out.println("<"+qName+">");
          for(int i=0;i<attributes.getLength();i++)
          {
               System.out.println(attributes.getQName(i)+":"+attributes.getValue(i));
          }
    }

    第三个函数:(输出节点的文本内容)

    public void characters(char[] ch,int start,int length) throws SAXException
    {
        System.out.println(new String(ch,start,length));
    }

    第四个函数:(输出结束标签)

    public void endElement(String uri,String localName,String qName) throws SAXException
    {
         System.out.println("<"+qName+">");
    }

    第五个函数:(解析结束)

    public void endDocument() throws SAXException
    {
         System.out.println("文档结束了");
    }

    完整代码:

    package com.sy;
    import java.io.File;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    public class SAX_xml {
    public static void main(String[] args) throws Exception, SAXException {
    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser parser = factory.newSAXParser();
    parser.parse(new File("books.xml"), new DefaultHandler(){
    @Override
    public void startDocument() throws SAXException {
    System.out.println("文档开始读取了……");
    }
    @Override
    public void startElement(String uri, String localName,
    String qName, Attributes attributes) throws SAXException {
    System.out.println("<"+qName+">");
    for(int i=0;i<attributes.getLength();i++){
    System.out.println(attributes.getQName(i) + ":"
    + attributes.getValue(i));
    }
    }
    @Override
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    System.out.println(new String(ch, start, length));
    }
    @Override
    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    System.out.println("<"+qName+">");
    }
    @Override
    public void endDocument() throws SAXException {
    System.out.println("文档结束了……");
    }

    });
    }
    }

    补充:

    1. 快捷键完成五个重载函数:alt+/ 输入要是用的函数的函数名的前两个字母(函数体需要重写)
    2. 给方法加注释:shift+alt+/
    3. 给类加注释:shift+alt+j
    4. 部分代码封装为函数:ctrl+alt+m
    5. 查看类的子类(继承关系):选中类名,Ctrl+t
    6. 查看类所在包:点击类名,相应导包语句背景色改变
    7. main函数生成快捷键:main alt+/
    8. 导包:ctrl+shift
    9. builder编译
    10. has_是否拥有
    11. 加载本地目录(清空列表):dshift选中所有项目,右键,delete
    12. map

     

     

     

  • 相关阅读:
    功能工作第五天终于有点眉目了
    SSM上传图片并保存图片地址到数据库
    基于Maven搭建SSM框架eclipese版本
    菜鸟初到公司应该准备的开发环境
    IDEA+Maven+SSM框架实现的简单的增、删、改、查
    如何在IDEA 中使用Git
    maven-ssm项目整合
    关于线程的知识模块
    百度地图api,使用QT同时绘制多个标注
    win10系统QT5下配置opencv教程
  • 原文地址:https://www.cnblogs.com/excellencesy/p/7828049.html
Copyright © 2020-2023  润新知