对xml文件的sax解析(增删改查)之一
crud(增删改查):
c:creat
r:retrieve
u:update
d:delete
以下笔记来自于韩顺平老师的讲解。
现在是用java来操作。
第一步:新建java工程。file-new-Java Project,输入工程的名字,点击finish.
第二步:放一个待解析的xml文件(classes.xml)到工程项目中的src目录中。
classes.xml文件的内容是:
<?xml version="1.0" encoding="UTF-8"?> <班级><学生><名字>周星驰</名字><年龄>23</年龄><介绍>学习刻苦</介绍></学生><学生><名字>林青霞</名字><年龄>32</年龄><介绍>是一个好学生</介绍></学生> </班级>
第三步:写一个java程序去解析这个xml文件。对着src右键,new-package,输入包名com.saxparsetest,点击finishl。
第四步:对着com.saxparsetest右键,写一个测试java测试程序,new-class:
第五步:可以愉快的开始写代码了。
package com.saxparsetest;import javax.xml.parsers.ParserConfigurationException; 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 saxparse {public static void main(String[] args) throws Exception, SAXException {// TODO Auto-generated method stub//使用sax技术解析xml文件(有套路)。//第一步,创建SaxParserFactory:SAXParserFactory spf=SAXParserFactory.newInstance();//第二步,创建SaxParser解析器:SAXParser saxParser=spf.newSAXParser();//第三步,把xml文件和【事件处理对象】关联saxParser.parse("src/classes.xml",new myDefaultHandle_wodelei());//第二个参数用于关联下面定义的事件处理类}} //定义事件处理类 class myDefaultHandle_wodelei extends DefaultHandler{@Override//该函数发现文档开始:public void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("发现文档开始的函数:startDocument()");super.startDocument();}@Override//该函数顺序发现xml文件中的元素(【推的机制】):public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {// TODO Auto-generated method stubSystem.out.println("元素名称:"+arg2);super.startElement(arg0, arg1, arg2, arg3);}@Override//该函数发现xml文件中的文本:public void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length);}@Override//该函数发现xml文件中一个元素的结束(即发现这样的标签:</xx>):public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}@Override//该函数发现整个xml文件的结束:public void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("发现文档结束的函数:endDocument()");super.endDocument();}}/*运行结果:发现文档开始的函数:startDocument() 元素名称:班级 元素名称:学生 元素名称:名字 元素名称:年龄 元素名称:介绍 元素名称:学生 元素名称:名字 元素名称:年龄 元素名称:介绍 发现文档结束的函数:endDocument()*/
package com.saxparsetest;import javax.xml.parsers.ParserConfigurationException; 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 saxparse {public static void main(String[] args) throws Exception, SAXException {// TODO Auto-generated method stub//使用sax技术解析xml文件(有套路)。//第一步,创建SaxParserFactory:SAXParserFactory spf=SAXParserFactory.newInstance();//第二步,创建SaxParser解析器:SAXParser saxParser=spf.newSAXParser();//第三步,把xml文件和【事件处理对象】关联saxParser.parse("src/classes.xml",new myDefaultHandle_wodelei());//第二个参数用于关联下面定义的事件处理类}} //定义事件处理类 class myDefaultHandle_wodelei extends DefaultHandler{@Override//该函数发现文档开始:public void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("发现文档开始的函数:startDocument()");super.startDocument();}@Override//该函数顺序发现xml文件中的元素(【推的机制】):public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {// TODO Auto-generated method stubSystem.out.println("元素名称:"+arg2);//super.startElement(arg0, arg1, arg2, arg3);//这句系统给的可以不要了}@Override//该函数发现xml文件中的文本:public void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stub//参数解释:ch其实是文档本身//显示文本内容:System.out.println(new String(ch,start,length));//super.characters(ch, start, length);//这句系统给的可以不要了}@Override//该函数发现xml文件中一个元素的结束(即发现这样的标签:</xx>):public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}@Override//该函数发现整个xml文件的结束:public void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("发现文档结束的函数:endDocument()");super.endDocument();}}/*发现文档开始的函数:startDocument() 元素名称:班级元素名称:学生元素名称:名字 周星驰元素名称:年龄 23元素名称:介绍 学习刻苦元素名称:学生元素名称:名字 林青霞元素名称:年龄 32元素名称:介绍 是一个好学生发现文档结束的函数:endDocument()*/
以上程序打印很多空行的原因是:xml文件中每个元素或属性值后面有空行。
解决办法1,手工去掉空行,左右内容全部换到一行字,没有空行就不会打印空格了:
解决办法2,在程序中加入判断:
package com.saxparsetest;import javax.xml.parsers.ParserConfigurationException; 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 saxparse {public static void main(String[] args) throws Exception, SAXException {// TODO Auto-generated method stub//使用sax技术解析xml文件(有套路)。//第一步,创建SaxParserFactory:SAXParserFactory spf=SAXParserFactory.newInstance();//第二步,创建SaxParser解析器:SAXParser saxParser=spf.newSAXParser();//第三步,把xml文件和【事件处理对象】关联saxParser.parse("src/classes.xml",new myDefaultHandle_wodelei());//第二个参数用于关联下面定义的事件处理类}} //定义事件处理类 class myDefaultHandle_wodelei extends DefaultHandler{@Override//该函数发现文档开始:public void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("发现文档开始的函数:startDocument()");super.startDocument();}@Override//该函数顺序发现xml文件中的元素(【推的机制】):public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {// TODO Auto-generated method stubSystem.out.println("元素名称:"+arg2);//super.startElement(arg0, arg1, arg2, arg3);//这句系统给的可以不要了}@Override//该函数发现xml文件中的文本:public void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stubString con=new String(ch,start,length);//这是接收到的文本内容if(!con.trim().equals("")) //trim()的目的是消除文本两端的空行{//参数解释:ch其实是文档本身//显示文本内容:System.out.println(new String(ch,start,length));//super.characters(ch, start, length);//这句系统给的可以不要了}}@Override//该函数发现xml文件中一个元素的结束(即发现这样的标签:</xx>):public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}@Override//该函数发现整个xml文件的结束:public void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("发现文档结束的函数:endDocument()");super.endDocument();}}/*运行结果:发现文档开始的函数:startDocument() 元素名称:班级 元素名称:学生 元素名称:名字 周星驰 元素名称:年龄 23 元素名称:介绍 学习刻苦 元素名称:学生 元素名称:名字 林青霞 元素名称:年龄 32 元素名称:介绍 是一个好学生 发现文档结束的函数:endDocument()*/
或者:
package com.saxparsetest;import javax.xml.parsers.ParserConfigurationException; 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 saxparse {public static void main(String[] args) throws Exception, SAXException {// TODO Auto-generated method stub//使用sax技术解析xml文件(有套路)。//第一步,创建SaxParserFactory:SAXParserFactory spf=SAXParserFactory.newInstance();//第二步,创建SaxParser解析器:SAXParser saxParser=spf.newSAXParser();//第三步,把xml文件和【事件处理对象】关联saxParser.parse("src/classes.xml",new myDefaultHandle_wodelei());//第二个参数用于关联下面定义的事件处理类}} //定义事件处理类 class myDefaultHandle_wodelei extends DefaultHandler{@Override//该函数发现文档开始:public void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("发现文档开始的函数:startDocument()");super.startDocument();}@Override//该函数顺序发现xml文件中的元素(【推的机制】):public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {// TODO Auto-generated method stubSystem.out.println("元素名称="+arg2);//super.startElement(arg0, arg1, arg2, arg3);//这句系统给的可以不要了}@Override//该函数发现xml文件中的文本:public void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stubString con=new String(ch,start,length);//这是接收到的文本内容if(!con.trim().equals("")) //trim()的目的是消除文本两端的空行{//参数解释:ch其实是文档本身//显示文本内容:System.out.println(new String(ch,start,length));//super.characters(ch, start, length);//这句系统给的可以不要了}}@Override//该函数发现xml文件中一个元素的结束(即发现这样的标签:</xx>):public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}@Override//该函数发现整个xml文件的结束:public void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("发现文档结束的函数:endDocument()");super.endDocument();}}/*运行结果:发现文档开始的函数:startDocument() 元素名称=班级 元素名称=学生 元素名称=名字 周星驰 元素名称=年龄 23 元素名称=介绍 学习刻苦 元素名称=学生 元素名称=名字 林青霞 元素名称=年龄 32 元素名称=介绍 是一个好学生 发现文档结束的函数:endDocument()*/
小结:sax技术的一个缺陷是不能对xml文件进行增、删、改,它主要用来对xml文件进行遍历解析。
转载于:https://www.cnblogs.com/yibeimingyue/p/9973568.html
对xml文件的sax解析(增删改查)之一相关推荐
- node.js 文件重命名||文件复制||删除||追加 增删改查
文件重命名 //文件处理 const fs = require("fs") //文件路径 const pathToFile = path.join(__dirname, " ...
- mybatis plus 不用写mapper.xml,即可使用crud(增删改查)
1.mapper接口继承BaseMapper public interface AMapper extends BaseMapper<A> { } 2.实体类 @Data @EqualsA ...
- XML解析以及增删改查的操作6
有一个字符串操作类StringUtil要贴出来,之前代码里用到: public class StringUtil {public static final String BLANKS = " ...
- 基于Python Flask框架+jquery Ajax技术实现的增删改查(CRUD)+Ajax的异步文件上传
运行界面(话不多说先上图) 运行之后的index界面,有登陆.注册功能 登陆界面,输入数据库中用户名.密码不为空且密码是加密的数据,进入main界面 注册界面,用的bootstrop的弹窗,用户名和密 ...
- Android本地文件管理器思路解析一一增删改查具体实现
花了一天的时间撸完了Android本地文件管理器~!!GitHub下载地址为:PumpkinFileManager 南瓜文件管理器1.0. 功能列表: 1: 实现了在ListView中浏览本地所有文件 ...
- Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查
之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...
- 如何 增删改查 XML文件中的元素
如何 增删改查 XML文件中的元素 students.xml 文件如下: <?xml version="1.0" encoding="UTF-8" sta ...
- JAVA 通讯录 —— 实现对XML文件数据的增删改查
心血来潮,带着好奇写了人生中第一篇博客,哈哈哈哈 ~ 嗝 ~ ~ 这篇文章主要就是分享自己做的一次项目作业,一是为了分享,二是用另外一种方式保存自己的代码 嘻嘻嘻 ~.还是个编程萌新,所以有啥写的 ...
- java file取不到linux文件_Java中高级核心知识全面解析——Linux基本命令(切换、增删改查、压缩文件、权限命令)...
一.目录切换命令 cd usr: 切换到该目录下usr目录 cd ..(或cd../): 切换到上一层目录 cd /: 切换到系统根目录 cd ~: 切换到用户主目录 cd -: 切换到上一个操作所在 ...
最新文章
- Setting the Reply-To Header in an Email using CDONTS.NewMail Object and CDO Message
- jQuery插件之ajaxFileUpload
- 什么?欧洲也有个恩智浦杯?
- 动态创建DataGrid的模版列(转)
- 基于标准C语言的数字图像处理基本框架(转)
- Android服务一 创建启动服务
- [设计模式]工厂模式factory
- mysql 文件组织_数据库如何组织数据?
- linux内存布局和地址空间布局随机化(ASLR)下的可分配地址空间
- 离散数学(本)复习题
- getbook netty实战_Netty 实战(精髓)简介(Netty in Action)
- R语言完成中国裁判文书网最新爬虫
- 一台服务器能承载多少用户_干货系列三:一台服务器能承载多少人同时访问?...
- 【使用python+selenium实现12306的自动登录及购票】
- 为什么技术面过了却挂在了HR面试之”谈谈你的职业生涯规划“
- Android studio 配置 jPBC 2.0.0
- 计算机二级c语言软件是,我想考计算机二级考C语言,用哪个教材?下载哪个软件?谢谢!!!!...
- jpa整合querydsl实现简单查询以及左联查询
- px4原生源码学习-(1)
- 第四篇 安装系统与多重引导
热门文章
- 【网址收藏】本地VSCode编辑远程服务器文件:Remote SSH
- 【收藏】HBase集成Phoenix实现类SQL操作hbase
- k3s containerd查看镜像命令示例
- Java线程池示例:任务窃取线程池WorkStealingPool
- Mybatis的@Param注解作用
- centos打显卡驱动命令_在Linux系统下安装Nvidia官方显卡驱动的方法
- BCompare日志
- 强化学习6——Value-based RL和Policy-based RL 的区别
- python改变字符串类型_python – Sklearn将字符串类标签更改为int
- golang 数组 最后一个_面试必问:Golang高阶Golang协程实现原理