zoukankan      html  css  js  c++  java
  • 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

     

     

     

  • 相关阅读:
    神经网络反向传播时的梯度计算技巧
    调整Virtual Box硬盘大小
    suse glibcxx版本过高问题
    linux命令之----sort命令用于将文本文件内容加以排序
    ffmpeg编码中的二阻塞一延迟
    Linux下查看编辑二进制文件:hexedit神器
    Unity3D之Mecanim动画系统学习笔记(二):模型导入
    Unity3D之Mecanim动画系统学习笔记(一):认识Mecanim动画系统
    TypeScript学习笔记(六):泛型
    TypeScript学习笔记(五):接口
  • 原文地址:https://www.cnblogs.com/excellencesy/p/7828049.html
Copyright © 2011-2022 走看看