sax解析xml

使用jaxp对比xml进行SAX解析

大憨熊 提交于 2020-01-02 09:59:01
package cn.itcast.sax; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class Demo1 { /** *sax方式解析book1.xml文件 * @throws SAXException * @throws ParserConfigurationException * @throws IOException */ public static void main(String[] args) throws ParserConfigurationException,

jaxp解析XML之SAX解析

吃可爱长大的小学妹 提交于 2020-01-02 09:58:11
SAX解析原理 是事件驱动的XML解析处理方法,是基于事件驱动的。 ContentHandler文档处理器类中 常用事件方法 startDocument("");文档开始事件时调用 endDocument("");文档结束事件时调用 startElement("")回调在每次SAX解析器遇到元素的起始标记时被调用 characters("")回调为字符数据时所调用 endElement("")回调为元素的结束标记所调用 DefaultHandLer类中来实现所有这些回调,并提供所有回调方法默认的空实现,是空实现不是抽象方法,空实现的好处需要用到哪个就子类复写哪个方法。 SAXPareser 不同于DOM的解析器会返回一个document文档对象,加载整个XML文档,该解析器在接收文档时同时接收一个ContentHandler文档处理器,通过文档处理器的事件方法来实时对XML文档进行处理。 从这里可以看出推模式的作用特征,由解析器内部主导事件方法调用 实例 public class SAXTest{   public static void main(String[]args){     SAXParserFactory factory=SAXParserFactory.newInstance();//创建解析工厂     SAXParser parser=factory

Java中四种XML解析技术

为君一笑 提交于 2020-01-02 09:49:46
在平时工作中,难免会遇到把 XML 作为数据存储格式。面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML 这块来测试,因为遍历 XML 是工作中使用最多的(至少我认为)。 预 备 测试环境:   AMD 毒龙1.4G OC 1.5G、256M DDR333、Windows2000 Server SP4、Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在 Debug 模式下测试。   XML 文件格式如下: 1 <?xml version="1.0" encoding="GB2312"?> 2   <RESULT> 3   <VALUE> 4   <NO>A1234</NO> 5   <ADDR>四川省XX县XX镇XX路X段XX号</ADDR> 6   </VALUE> 7   <VALUE> 8   <NO>B1234</NO> 9   <ADDR>四川省XX市XX乡XX村XX组</ADDR> 10   </VALUE> 11   </RESULT> 测试方法:    采用 JSP 端调用Bean(至于为什么采用JSP来调用,请参考:http://blog.csdn.net/rosen/archive/2004/10/15 /138324.aspx),让每一种方案分别解析10K、100K

Java解析XML文件的四种方法

╄→гoц情女王★ 提交于 2019-12-27 03:07:23
1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 2)SAX SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX? 对于需要自己编写代码来处理XML文档的开发人员来说, 选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。 DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易

Sax解析XMl

蓝咒 提交于 2019-12-23 15:54:05
sax和传统的Dom操作XML相比较更加灵活,不会因为XML文件过大占用太多内存,他是随时去扫面XML内容,根据用户设置的节点获取属性值或者节点值 每个处理XML的Class都要继承DefaultHandler 重写五个个方法 文档、节点的开始和结束都是出发相应的方法,获取所需数据和操作 当访问到节点数据值时会执行characters 方法 获取值 startDocument()方法只会在文档开始解析的时候被调用,每次解析只会调用一次。 startElement()方法每次在开始解析一个元素,即遇到元素标签开始的时候都会调用。 characters()方法也是在每次解析到元素标签携带的内容时都会调用,即使该元素标签的内容为空或换行。而且如果元素内嵌套元素,在父元素结束标签前, characters()方法会再次被调用,此处需要注意。 endElement()方法每次在结束解析一个元素,即遇到元素标签结束的时候都会调用。 endDocument() startDocument()方法只会在文档解析结束的时候被调用,每次解析只会调用一次 ​ XMl文件如下 ​<?xml version="1.0" encoding="UTF-8"?> <books> <book id="12"> <name>thinking in java</name> <price>85.5</price> <

XML数据的三种解析方式

女生的网名这么多〃 提交于 2019-12-18 07:06:30
Android开发主流是传json,而XML解析一般跟网络请求,爬虫数据相关。 一丶概述 在Android中提供了三种解析XML的方式:DOM(Document Objrect Model),SAX(Simple API XML),以及Android推荐的Pull解析方式。 如图: SAX (Simple API for XML) 使用流式处理的方式,它并不记录所读内容的相关信息。它是一种以事件为驱动的XML API,解析速度快,占用内存少。使用回调函数来实现。 缺点是不能倒退。 DOM (Document Object Model) 是一种用于XML文档的对象模型,可用于直接访问XML文档的各个部分。它是一次性全部将内容加载在内存中,生成一个树状结构,它没有涉及回调和复杂的状态管理。 缺点是加载大文档时效率低下。 Pull 内置于 Android 系统中。也是官方解析布局文件所使用的方式。Pull与SAX有点类似,都提供了类似的事件,如开始元素和结束元素。不同的是,SAX的事件驱动是回调相应方法,需要提供回调的方法,而后在SAX内部自动调用相应的方法。而Pull解析器并没有强制要求提供触发的方法。因为他触发的事件不是一个方法,而是一个数字。它使用方便,效率高。 SAX、DOM、Pull的比较: 1. 内存占用:SAX、Pull比DOM要好; 2. 编程方式:SAX采用事件驱动

17.JAVA-Dom、Sax解析XML详解

。_饼干妹妹 提交于 2019-12-12 15:37:54
在JAVA中,解析有三种方式: Dom解析 (支持改删,耗内存) 、 Sax解析 (不支持改删,不耗内存) 、 Pull解析 (在Android中推荐使用的一种解析XML的方式,在下章 18.JAVA-pull解析XML 学习) 1. 支持Dom 与Sax 解析的开发包 分为两种. JAXP: 由sun公司推出的解析标准实现(本章只学习该包的解析方法) Dom4j: 一种开源的解析开发包. jaxp是java api中自带的一个包,而dom4j需要我们加入jar文件才能使用 2.JAXP 使用 JAXP(Java API for XMLProcessing)主要由下面几个包组成: org.w3c.dom: 定义DOM解析器的标准接口 org.w3c.sax: 定义SAX解析器的标准接口 javax.xml: 提供解析xml文档的类 javax.xml.parsers: 提供了用来获取DOM和SAX解析器对象的工厂类,比如:DocumentBuilderFactory(创建DOM解析器对象)、SAXParserFactory,如下图所示: 3. 使用JAXP 进行 DOM 解析 会将XML文档全部内容都读入内存中,并且将文档里的每个数据都创建为一个个对象,所以方便增删改.并且遍历简单。 DOM的缺点主要表现在:效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。 3.1

17.JAVA-Dom、Sax解析XML详解

一笑奈何 提交于 2019-12-12 00:33:14
在JAVA中,解析有三种方式: Dom解析 (支持改删,耗内存) 、 Sax解析 (不支持改删,不耗内存) 、 Pull解析 (在Android中推荐使用的一种解析XML的方式,在下章学习) 、 1. 支持Dom 与Sax 解析的开发包 分为两种. JAXP: 由sun公司推出的解析标准实现(本章只学习该包的解析方法) Dom4j: 一种开源的解析开发包. jaxp是java api中自带的一个包,而dom4j需要我们加入jar文件才能使用 2.JAXP 使用 JAXP(Java API for XMLProcessing)主要由下面几个包组成: org.w3c.dom: 定义DOM解析器的标准接口 org.w3c.sax: 定义SAX解析器的标准接口 javax.xml: 提供解析xml文档的类 javax.xml.parsers: 提供了用来获取DOM和SAX解析器对象的工厂类,比如:DocumentBuilderFactory(创建DOM解析器对象)、SAXParserFactory,如下图所示: 3. 使用JAXP 进行 DOM 解析 会将XML文档全部内容都读入内存中,并且将文档里的每个数据都创建为一个个对象,所以方便增删改.并且遍历简单。 DOM的缺点主要表现在:效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。 3.1 persons.xml示例如下:

JavaEE XML SAX解析

瘦欲@ 提交于 2019-12-09 11:25:31
SAX解析XML @author ixenos SAX解析工具 SAX解析工具- Sun公司提供的。内置在jdk中。org.xml.sax.* 核心的API: SAXParser类: 用于读取和解析xml文件对象 parse( File f, DefaultHandler dh )方法: 解析xml文件 参数一: File:表示 读取的xml文件。 参数二: DefaultHandler: SAX事件处理程序。使用DefaultHandler的子类 例如:{ 1.创建SAXParser对象 SAXParser parser=SAXParserFactory. newInstance ().newSAXParser(); 2.调用parse方法 parser.parse( new File("./src/contact.xml"), new MyDefaultHandler()); } [一个类继承class 类名( extends DefaultHandler) 在调用是创建传进去 DefaultHandler类的API: void startDocument() : 在读到文档开始时调用 void endDocument() :在读到文档结束时调用 主要重写以下三个方法 void startElement(String uri, String localName, String

XML之SAX的解析

我是研究僧i 提交于 2019-12-07 14:46:27
XML: <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE>    <NO>A1234</NO>    <ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE>   <NO>B1234</NO>    <ADDR>四川省XX市XX乡XX村XX组</ADDR> </VALUE> </RESULT> java: package www.yq.com.src; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Stack; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import