XML —— SAX方式解析XML

1. SAX 方式解析 XML 原理

  • SAX 的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element) 开始与结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同 样的扫描,直至文档结束。
  • 优点:相对于DOM方式消耗资源比较少,适合大文件解析;
  • 缺点:只能读取不能修改;开发复杂;

2. SAX 方式解析 XML 示例

  1. 扫描文档

    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 SAX01 extends DefaultHandler{
    
        @Override
        public void startDocument() throws SAXException {  //开始扫描文档事件
            System.out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        }
    
        @Override
        public void endDocument() throws SAXException {  //结束扫描文档事件
            System.out.print("\n 扫描文档结束");
        }
    
        @Override
        public void startElement(String uri, String localName, String qName,
                Attributes attributes) throws SAXException {  //开始扫描元素事件  uri前缀
            System.out.print("<");
            System.out.print(qName);
            if(attributes!=null){
                for(int i=0;i<attributes.getLength();i++){
                    System.out.print(" "+attributes.getQName(i)+"=\""+attributes.getValue(i)+"\"");
                }
            }
            System.out.print(">");
        }
    
        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {   //结束扫描元素事件
            System.out.print("</");
            System.out.print(qName);
            System.out.print(">");
        }
    
        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException { // 扫描文本节点事件
            System.out.print(new String(ch,start,length));
        }
    
        public static void main(String[] args) throws Exception{
            SAXParserFactory factory=SAXParserFactory.newInstance();
            SAXParser parser=factory.newSAXParser();
            parser.parse("src/student.xml", new SAX01());
        }
    }
  2. 获取值

    import java.util.ArrayList;
    import java.util.List;
    
    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;
    
    import com.learn.model.Student;
    
    public class SAX02 extends DefaultHandler{
        private List<Student> students=null;
        private Student student=null;
        private String preTag=null; // 标记上一个节点名称
    
        @Override
        public void startDocument() throws SAXException {
            System.out.println("开始读取学生信息");
            students=new ArrayList<Student>();
        }
    
        @Override
        public void endDocument() throws SAXException {
            System.out.println("\n 学生信息读取完毕");
        }
    
        @Override
        public void startElement(String uri, String localName, String qName,
                Attributes attributes) throws SAXException {
            if("student".equals(qName)){
                student=new Student();
                student.setId(attributes.getValue(0));
            }
            preTag=qName;
        }
    
        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {
            if("student".equals(qName)){
                students.add(student);
                student=null;
            }
            preTag=null;
        }
    
        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            if(preTag!=null){
                String content=new String(ch,start,length);
                if("name".equals(preTag)){
                    student.setName(content);
                }else if("sex".equals(preTag)){
                    student.setSex(content);
                }else if("age".equals(preTag)){
                    student.setAge(Integer.parseInt(content));
                }
            }
        }
    
        public static void main(String[] args) throws Exception{
            SAXParserFactory factory=SAXParserFactory.newInstance();
            SAXParser parser=factory.newSAXParser();
            SAX02 sax02=new SAX02();
            parser.parse("src/students.xml", sax02);
            for(Student s:sax02.students){
                System.out.println(s);
            }
        }
    }

原文地址:https://www.cnblogs.com/Cocoomg/p/9901615.html

时间: 2024-10-13 03:20:17

XML —— SAX方式解析XML的相关文章

XML引入,DOM 方式解析XML 原理,SAX 方式解析XML

XML 简介 Xml(eXtensible Markup Language) 即可扩展标记语言.提供了一套跨平台.跨网络.跨程序的语言的数据描述方式,使用XML 可以方便地实现数据交换.系统配置.内容管理等常见功能. 元素VS 节点 节点包括元素节点.属性节点.文本节点:元素一定是节点,但是节点不一定是元素: <?xml version="1.0" encoding="UTF-8"?> <emp> <empName empNo=&quo

Android系列之网络(四)----SAX方式解析XML数据

?[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4044170.html 联系方式:[email protected] [系列]Android系列之网络:(持续更新) Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) Android系列之网络(二)----HTTP请求头与响应头 Androi

SAX方式解析xml文件查看天气

1.SAX方式解析xml文件的步骤: ①创建解析器工厂对象 ②使用当前配置的工厂参数创建SAXParser对象 ③解析xml文件 ④利用DefaultHandler创建事件驱动者 2.对于标签对象进行引用怎么办? ①定义当前解析的标签:private String tagName=null; ②在startElement()方法中赋值tagName:this.tagName=qName; ③在endElement()方法中将tagName赋值为空:this.tagName=null; ④在cha

通过Sax方式解析xml文件

说明:此案例使用的是通过Dom方式解析xml文件这篇文章里的City类和china.xml文件. 1. 因为xml文件有两种格式,一是上面那篇文章里的那种元素节点里只包含属性节点,另一种就是元素节点里包含元素节点和文本节点,于是在china.xml中添加如下代码,以实现两种方式的解析: <city> <cityname>杭州</cityname> <pyName>zhejiang</pyName> <quName>浙江</quN

QT开发(四十三)——SAX方式解析XML

QT开发(四十三)--SAX方式解析XML 一.SAX简介 SAX是Simple API for XML的简写,是一种解析XML文件的替代方法,不是由W3C官方所提出的标准,是一种事件驱动的XML API,接近于底层,速度较快,但不便于随机访问任意节点. SAX解析的核心是事件处理机制,具有占用内存少,效率高等特点. SAX采用事件机制的方式来解析XML文档.使用SAX解析器对XML文档进行解析时,SAX解析器根本不创建任何对象,只是在遇到XML文档的各种标签如文档开始.元素开始.文本.元素结束

SAX方式解析XML文件的方法分析

SAX(Simple API for XML)SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束.元素(element)开始与结束.文档(document)结束等地方时通知事件处理方法,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束.SAX解析方式适用于大型文档,因为他的解析是逐行进行不用像DOM中那样为所有节点创建对象,这样效率大大提高,所以虽然它不是W3C标准,但它却得到了广泛认可. 这是一个需要解析的XML文件: <?xml versio

网络相关系列之四:数据解析之SAX方式解析XML数据

一.XML和Json数据的引入: 通常情况下.每一个须要訪问网络的应用程序都会有一个自己的server.我们能够向server提交数据,也能够从server获取数据.只是这个时候就有一个问题,这些数据是以什么格式在网络上传输的呢?一般我们都会在网络上传输一些格式化后的数据,这样的数据会有一定的结构规格和语言,当还有一方收到数据消息后就能够依照同样的结构规格进行解析.从而取出它想要的那部分内容. 在网络上数据传输最经常使用的格式:XML和Json.本文就来学习一下XML数据的解析,Json格式的数

XML —— DOM方式解析XML

1. DOM 方式解析 XML 原理 基于 DOM(Document Object Model,文档对象模型)解析方式,是把整个 XML 文档加载到内存,转化成 DOM 树,因此应用程序可以随机的访问 DOM 树的任何数据: 优点:灵活性强,速度快: 缺点:消耗资源比较多: 2. 元素 VS 节点 ( 节点包含元素 ) 节点包括元素节点.属性节点.文本节点 <!-- students.xml --><?xml version="1.0" encoding="

Android中通过SAX方式解析XML

每个访问网络的应用程序都有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器上获取数据.那么,这些数据是用什么格式在网络上传输的呢?一般,我们会在网络上传输一些格式化的数据,这些数据有一定的结构和语义.另一方收到数据消息后就可以按照相同的结构规格来进行解析,从而获取到想要的那部分内容. 网络上传输数据最常用的格式有两种,XML和JSON.下面,我们介绍通过SAX方式来解析XML. 首先,进行准备一段XML格式的数据. get_data.xml 1 <apps> 2 <app>