XML解析之SAX解析

Java SAX 解析 XML 与 DOM 建立树形结构的方式不同,SAX 采用事件模型来解析 XML 文档,是解析 XML 文档的一种更快速、更轻量的方法。 利用 SAX 可以对 XML 文档进行有选择的解析和访问,而不必像 DOM 那样加载整个文档,因此它对内存的要求较低。 但 SAX 对 XML 文档的解析为一次性读取,不创建任何文档对象,很难同时访问文档中的多处数据。 在解析xml文件之前,我们要先了解xml文件的 阅读详情
 概念:
 SAX(simple API for XML)是一种XML解析的替代方法。
 而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,
 但任何事物都有其相反的一面,对于SAX来说就是操作复杂。它也是事件驱动的

思想 :

  1. 和pull解析一样,要有一个工厂
  2. 用sax工厂方法,得到sax解析器
  3. 设置文件来源,和handler
  4. 使用代理的handler,进行解析
  5. 重写handler的方法
  6. 重点看代码

写了一天的代码,不想说话,看代码

  static List<Play> list = null;   //储存所有的play对象
    static Play p = null;
    private static void xmlSaxParserDemo() {

        try {
            SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
            parser.parse(new FileInputStream("E:\\CodeDemo\\HttpUrlConnection\\paly.xml"),new MyHandler());
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    static class MyHandler extends DefaultHandler {

        int type = -1; //用于开始节点的标识
        @Override
        public void startDocument() throws SAXException {
            System.out.println("startDocument");  //用于初始化数据,如果没必要就不需要重写  只是执行一次

        }

        @Override
        public void endDocument() throws SAXException {  //文档结束时调用, 只是执行一次,可以不重写
            System.out.println("endDocument");
        }

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            //开始元素,是重点, 在这里进行分析
            //qName就是我们的数据

            switch (qName) {
                case "PlayList":
                    list = new ArrayList<>();
                    break;
                case "media":
                    p = new Play();
                    for (int i = 0; i < attributes.getLength(); i++) {
                        p.setDay(Integer.parseInt(attributes.getValue("day")));
                        p.setId(Integer.parseInt(attributes.getValue("id")));
                    }
                    break;
                case "type":
                    type = 0;
                    break;
                case "name":
                    type = 1;
                    break;
                case "path":
                    type = 2;     // 0,1,2用于下面方法 进行获取数据时,判断
                    break;
                default:
                    break;
            }

        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            //     System.out.println("endElement: " + "uri = " + uri + " localName = " + localName + " qName = " + qName);
            //这是只对media 处理
            if (qName.equals("media")) {
                list.add(p);
            }
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
         //      System.out.println("content: " + new String(ch,start,length));
            String content = new String(ch,start,length);
            switch (type) {
                case 0:

                    p.setType(Integer.parseInt(content));
                    break;
                case 1:
                    p.setName(content);
                    break;
                case 2:
                    p.setPath(content);
                    break;
            }
            type = -1;  //一定要记得置位 !
        }
    }
}
SAX解析XML文件 SAX解析简介 SAX(Simple API for XML)是一种以事件驱动的XML API,是XML解析的方式之一。DOM解析会将XML全部加载到内存中,再进行解析。SAX与DOM不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,所以它解析XML具有速度快,占用内存少的优点。 SAX解析步骤 SAX解析的核心步骤有如下几步: 得到xml文件对应的资源,可以是xml的输入流,文件和... 阅读详情

相关推荐

VCS和UVM常用编译选项

VCS编译选项 -full64 在64bit模式下编译、仿真,用于64位操作系统 -j8 指定编译器可以并行编译的进程数为8 -timescale=1ns/1ps 指定仿真时间和精度 +libext+.v+.V+.sv+.svh 识别.v、.sv、.svh等多种格式文件 -sverilog 支持system verilog 编译 -f xxx.lisf 指定包含所有设计文件列表的文件名 -top test 设置顶层模块为test。(指包含.

qq_40571921的博客 9932

XML--02--解析-SAX方式

https://blog.youkuaiyun.com/liuquan0071/article/details/50264379? https://blog.youkuaiyun.com/lsh364797468/article/details/51325540 https://blog.youkuaiyun.com/m0_37499059/article/details/80505567? https://blog.youkuaiyun.com/redarmy_chen/article/details/12951649 https://blog.csd

时光里的博客 1033

手把手教你接入京东购物小程序:从领券到下单的全流程解析

本文详细解析了如何从API申请到领券下单,手把手教你接入京东购物小程序的全流程。涵盖京东联盟账号注册、商品信息获取、优惠券链接转换等关键技术实践,帮助开发者高效实现电商功能集成,提升用户购物体验。

g5h6i的博客 908

Java之xml解析(Sax方式)

Sax(Simple API for XML)采用事件驱动的方式边读边解析文档。

qq_44166712的博客 3241

HTPA 32x32d热成像传感器实战指南:从替代MLX90640到精准测温

本文为HTPA 32x32d热成像传感器提供了从硬件连接到精准测温的完整实战指南。针对MLX90640替代需求,详细解析了HTPA传感器的核心优势、IIC通信要点、EEPROM校准数据读取与解析、独特的块数据读取模式,并逐步拆解了五大温度补偿计算流程,旨在帮助开发者克服高开发门槛,实现稳定可靠的非接触式测温应用。

weixin_29279101的博客 313

DBSCAN聚类算法——机器学习(理论+图解+python代码)

一、前言 二、DBSCAN聚类算法 三、参数选择 四、DBSCAN算法迭代可视化展示 五、常用的评估方法:轮廓系数 六、用Python实现DBSCAN聚类算法 一、前言 去年学聚类算法的R语言的时候,有层次聚类、系统聚类、K-means聚类、K中心聚类,最后呢,被DBSCAN聚类算法迷上了,为什么呢,首先它可以发现任何形状的簇,其次我认为它的理论也是比较简单易懂的。今年在python...

huacha__的博客 20万+

sax解析xml详解

sax与dom的区别 xml(或SGML)API主要有两种形式: 基于树的API,最常见的就是w3c的dom解析,java原生中也集成了这种解析方式,这种方式会将一个xml解析成为树的形式来处理并且是将整个xml放到内存中。 基于事件的API,也就是本次介绍的sax(Simple API for XML),它是直接通过处理不同的事件回调解析来处理xml,并不会建立维护一个内部的树,比如以下这种。...

qq_41063182的博客 4289

实现飞书机器人推送消息到指定群组或者用户

飞书是一个集成了聊天、协作和办公功能的企业级平台,广泛应用于企业内部沟通和协作。飞书机器人(Feishu Bot)是一种强大的工具,允许开发者通过编程接口与飞书进行互动,从而实现自动化消息推送和任务管理。本文将详细介绍如何通过飞书机器人推送消息给指定的人或者群组,帮助您快速上手。

qq_41898196的博客 5865

java使用SAX解析器解析XML文件

SAX,也称为Simple API for XML,是jdk自带的 用于解析 XML 文档 API。它是一种基于流的解析方式,边读取XML边解析,并以事件回调的方式让调用者获取数据。因为是一边读一边解析,所以无论XML有多大,占用的内存都很小,所以 SAX 具有高效的内存管理。 三、XmlRow类 四、SAXHandler类 五、测试 输出: 参考:Parsing an XML File Using SAX ParserParsing an XML File Using StAXexcel-xml-

西凉的悲伤博客 4283

windows 应用爬虫: exe自动操作

之前写了那么多关于手机和网页爬取,今天就写一期关于exe的爬取,exe的爬取其实也是类似的,一个方式是抓包,还有一个模拟人工界面获取元素数据。抓包肯定是最直接,数据也是最全的, 有些数据不一定会显示在界面上,或者必须通过一定交付方式,才能显示到页面(比如移动鼠标到具体元素上)。本文依旧采用python方式,先说说怎么通过界面方式驱动应用点击和数据获取。

youbingchen的博客 888

Qt代码-软件商店

ui->statusBar->showMessage(QString("%1 已卸载").arg(app["name"].toString()));ui->statusBar->showMessage(QString("开始下载 %1...").arg(app["name"].toString()));QString("%1 已下载完成,是否立即安装?ui->statusBar->showMessage(QString("%1 下载完成").arg(app["name"].toString()));

寒寒豆豆软件公司的博客 111

XML解析(一),SAX解析XML

一、概述 SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOC解析,PULL解析(Android特有),SAX与DOC不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,所以它解析XML具有速度快,占用内存少的优点,对于Android等CPU资源宝贵的移动平台来说是一个巨大的优势。 SAX的优点:解析速

宿罪的博客 3万+

【数据集】中国2003年至2022年全天空每日气温数据集

中国2003年至2022年全天空每日气温数据集

WW、forever的博客 602

SAX解析XML 详解

SAX解析XML 详解

此生尽兴 7812

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

XML——XML解析之SAX

本文详细介绍了使用SAX解析XML文档的机制和方法

Gavin 1970

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python之SAX解析XML

SAX 是一种基于事件驱动的API。 利用 SAX 解析 XML 文档牵涉到两个部分: 解析器和事件处理器。 解析器负责读取 XML 文档,并向事件处理器发送事件,如元素开始跟元素结束事件。 而事件处理器则负责对事件作出响应,对传递的 XML 数据进行处理。 1、对大型文件进行处理; 2、只需要文件的部分内容,或者只需从文件中得到特定信息。 3、想建立自己的对象模型的时候。 在 Python 中...

起风了 3832

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android之SAX解析XML

首先我们来了解一下SAX解析器的基本知识: SAX(Simple API for XML)解析器是一种基于事件的解析器,事件驱动的流式解析方式是,从文件的开始顺序解析到文档的结束,不可暂停或倒退。它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的。当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理。在事件源调用事件处理器中特定方法的时候,还要传递给事件处理器相

bear_huangzhen的专栏 1万+

XML解析之SAX方式

XML解析之SAX方式解析xml文件 SAX解析方式会逐行地去扫描XML文档,当遇到标签时会触发解析处理器,采用事件处理的方式解析XML (Simple API for XML) ,不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。优点是:在读取文档的同时即可对XML进行处理,不必等到文档加载结束,相对快捷。不需要加载进内存,因此不存在占用内存的问题,可以解析超大XML。缺点是:只能用来读取XML中数据,无法进行增删改。 SAX解析可分四个步骤进行: 1、得到xml文

Fisher 2891

SAX解析XML

SAX解析XML 1.XML(Extensible Markup Language 可扩展标记语言),XML是一个以文本来描述数据的文档。 XML文档示例: <?xml version="1.0" encoding="UTF-8" ?> <people> <person personId="E01"> <name>Tony Blair</name> <address>10 Downing Stre

七一 1654

sax解析xml

通sax方式解析xml import com.kq.entity.Student; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParser; import java...

kongkong的专栏 599

Java Sax解析xml

一、概述  SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOM解析,PULL解析(Android特有),SAX与DOM不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,所以它解析XML具有速度快,占用内存少的优点,对于Android等CPU资源宝贵的移动平台来说是一个巨大的优势。 SAX的...

数据工匠记 2万+

java sax解析xml_Java Sax解析xml

1. Java Sax解析是按照xml文件的顺序一步一步的来解析,在解析xml文件之前,我们要先了解xml文件的节点的种类,一种是ElementNode,一种是TextNode。如下面的这段book.xmlthinking in java85.5Spring in Action39.0其中,像、这种节点就属于ElementNode,而thinking in java、85.5这种就属于Text...

weixin_28785681的博客 270
上一篇: XML解析之pull解析
下一篇: RelativeLayout 详解 之58同城
android_lyp
博客等级 码龄11年 14粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值