首页 > 其他分享 >使用SAX读取XML文件--(SAX的基础语法练习)

使用SAX读取XML文件--(SAX的基础语法练习)

时间:2023-04-19 17:38:12浏览次数:33  
标签:XML xml String -- SAX 解析 读取


SAX的基本知识:

XML的SAX解析:
 DOM解析原理:一次性把XML文档加载进内存,然后在内存中构建Document树,对内存要求比较高。
        DOM解析缺点:不适合读取大容量的XML文件,容易导致内存溢出。

 SAX解析原理:加载一点,读取一点,处理一点,对内存要求比较低。
 
 SAX解析工具:Sun公司提供的。内置在jdk中。org.xml.sax.*
 核心的API:
  SAXParser类:用于读取和解析XML文件对象
   parse(File 飞,DefaultHandler dh)方法;解析XML文件
  参数一:File:表示读取的XML文件
  参数二:DefaultHandler:SAX事件的处理程序。使用DefaultHandler的子类
 DefaultHandler类的API:
  void startDocument() : 在读到文档开始时调用
  void endDocument() :在读取文档结束时调用
  void startElement(String url,String localName,String qName,Attributes attributes):读到开始标签是调用
  void endElement(String url,String localName,String qName);读到结束标签时调用

======DOM解析    VS     SAX解析======
DOM解析
    原理:一次性加载XML文档,不适合大容量文件读取;
    DOM解析可以任意进行增删改查
    DOM解析任意读取任何位置的数据,甚至往回读
    DOM解析面向对象的编程方法(Node,Element,Attribute)Java开发者编译比较简单
SAX解析
    原理:加载一点,读取一点,处理一点。适合大容量文件读取
    SAX解析只能读取
    SAX解析只能从上往下,按顺序读取,不能往回读
    SAX解析基于事件的编译方法,Java开发编译相对复杂

 

实现的功能:使用SAX读取contact.xml文件:

XML文件:contact.xml

<?xml version="1.0" encoding="utf-8"?>
<contactList>
	<contact id="001" name="eric">
		<name>张三</name>
		<age>20</age>
		<phone>134222223333</phone>
		<email>[email protected]</email>
		<qq>432221111</qq>
	</contact>
	<contact id="002" name="jacky">
		<name>eric</name>
		<age>20</age>
		<phone>134222225555</phone>
		<email>[email protected]</email>
		<qq>432222222</qq>
	</contact>
</contactList>

实现功能的处理程序:MyDefaultHandler.java

package SAX;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/*
 * SAX处理程序(如何解析XML文件)
 */
public class MyDefaultHandler extends DefaultHandler {
	/*
	 * 开始文档时调用
	 */
	@Override
	public void startDocument() throws SAXException {
		System.out.println("MyDefaultHandler.startDocument()");
	}
	
	/*
	 *开始标签时调用 
	 *@param qName:表示开始标签的标签名
	 *@param attributes :表示开始镖旗内包含的属性列表
	 */
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		System.out.println("MyDefaultHandler.startElement()-->"+qName);
	}
	
	/*
	 * 结束标签时调用
	 * @param qName:结束标签的标签名称
	 */
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		System.out.println("MyDefaultHandler.endElement()-->"+qName);
	}
	
	/*
	 * 读到文本内容时调用
	 * @param ch: 表示当前读完的所有文本内容
	 * @param start: 表示当前文本内容的开始位置
	 * @param length: 表示当前文本内容的长度
	 */
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		//得到当前文本内容
		String content = new String(ch,start,length);
		System.out.println("MyDefaultHandler.characters()-->"+content);
	}
	
	/*
	 * 结束文档时调用
	 */
	@Override
	public void endDocument() throws SAXException {
		System.out.println("MyDefaultHandler.endDocument()");
	}
}

实现的主程序:Demo_sax.java

package SAX;

import java.io.File;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
/*
 * 第一个SAX读取XML文件程序
 */

public class Demo_sax {
	public static void main(String[] args) throws Exception {
		//1.创建SAXParse对象
		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
		//2.调用parse方法      参数一:XML文档;参数二:DefaultHandler的子类
		parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());
	}
}

 

标签:XML,xml,String,--,SAX,解析,读取
From: https://blog.51cto.com/u_16079508/6207013

相关文章

  • 物联网信创开新局!边无际Shifu物联网开发平台与麒麟软件完成互认证
    边无际Shifu物联网开发平台和麒麟软件信创操作系统日前完成了互认证,这将为物联网设备的开发和应用提供更加全面的支持和保障。据悉,边无际Shifu物联网开发平台已经在银河麒麟桌面操作系统(兆芯版)V10、银河麒麟桌面操作系统(海光版)V10、银河麒麟麟桌面操作系统(AMD64版)V10上整体运......
  • 第十四届男篮世锦赛(8.29-9.8)
           2006年1月15日,2006年男篮世锦赛抽签仪式东京当地时间15日下午3点举行。中国男篮分在D组,再次遭遇到强大的美国队,同组其他对手分别是波多黎各、斯洛文尼亚、意大利和塞内加尔队,而D组的比赛将在日本札幌进行。       来自五大洲24队的代表参加了今天下午的......
  • 知识付费小程序源码资源共享会员积分广告小程序定制开发源码二开
    资源分享可以在后台添加各种资源,如风景,写真,cos,壁纸,各种链接。后台可以设置这些资源如何观看,免费,看广告,VIP广告设置可以添加各种广告,可以在广告设置里设置好广告id还有广告应用场景。VIP设置管理员可以在后台更改用户的VIP设置,也可以设置卡密,让用户自行解锁vip,也可以设置积分,让用户......
  • 软件安全测试有哪些测试要点?软件安全测试报告价格是多少?
    一、软件安全测试是什么?软件安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。二、软件安全测试有哪些测试要点?1.上传功能(1)绕过文件上传检查功能(2)上传文件大小和......
  • thinkphp
    ThinkPHP是一个开源的PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。早期的思想架构来源于Struts,后来经过不断改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开......
  • CopyNinja
    CopyNinja是针对开发者设计的一款全功能的文本/代码生成工具,它由数据库表、视图与属性设计器一起生成各类表单、网格或者其它界面、非界面文本/代码,所有模版全插件式构筑,JS,JSON及基于JS的模版语言。支持数据库种类:Oracle,SQLServer,MySQL,Access,DB2,PostgreSQL,SQLite。(注意:Or......
  • BoneCP
    BoneCP是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,而相比之下C3P0要六百多K。 官方网站http://jolbox.com/......
  • EasyConnect
    EasyConnect能够帮助您在办公室之外使用公司内网的所有系统及应用。在您的公司部署深信服远程应用发布解决方案后,您的公司所有业务系统及应用都可以轻松迁移至移动互联网上。您可以通过手机、PAD等智能移动终端随时随地开展您的业务,尽享移动业务带来的便利与效率。 http://www.san......
  • 词嵌入思想简要
    词嵌入(WordEmbedding)是一种将单词映射到低维向量空间中的技术,它通过将每个单词表示为一个向量,来捕捉单词之间的语义和上下文信息。这种技术的思想是基于分布式语义假说(DistributedSemanticsHypothesis)提出的。该假说认为,每个单词都可以通过它周围的上下文来表达其语义信息,也......
  • 随机特征映射基本思想
    随机特征映射基本思想简介随机傅里叶特征映射(RandomFourierFeatureMapping)的基本理论随机核特征映射(RandomKernelFeatureMapping)基本理论随机局部线性嵌入(RandomLocalityPreservingEmbedding)的基本理论随机投影(RandomProjection)的基本理论简介......