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解析(增删改查)之一相关推荐

  1. node.js 文件重命名||文件复制||删除||追加 增删改查

    文件重命名 //文件处理 const fs = require("fs") //文件路径 const pathToFile = path.join(__dirname, " ...

  2. mybatis plus 不用写mapper.xml,即可使用crud(增删改查)

    1.mapper接口继承BaseMapper public interface AMapper extends BaseMapper<A> { } 2.实体类 @Data @EqualsA ...

  3. XML解析以及增删改查的操作6

    有一个字符串操作类StringUtil要贴出来,之前代码里用到: public class StringUtil {public static final String BLANKS = " ...

  4. 基于Python Flask框架+jquery Ajax技术实现的增删改查(CRUD)+Ajax的异步文件上传

    运行界面(话不多说先上图) 运行之后的index界面,有登陆.注册功能 登陆界面,输入数据库中用户名.密码不为空且密码是加密的数据,进入main界面 注册界面,用的bootstrop的弹窗,用户名和密 ...

  5. Android本地文件管理器思路解析一一增删改查具体实现

    花了一天的时间撸完了Android本地文件管理器~!!GitHub下载地址为:PumpkinFileManager 南瓜文件管理器1.0. 功能列表: 1: 实现了在ListView中浏览本地所有文件 ...

  6. Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查

    之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...

  7. 如何 增删改查 XML文件中的元素

    如何 增删改查 XML文件中的元素 students.xml 文件如下: <?xml version="1.0" encoding="UTF-8" sta ...

  8. JAVA 通讯录 —— 实现对XML文件数据的增删改查

    心血来潮,带着好奇写了人生中第一篇博客,哈哈哈哈 ~ 嗝 ~ ~   这篇文章主要就是分享自己做的一次项目作业,一是为了分享,二是用另外一种方式保存自己的代码 嘻嘻嘻 ~.还是个编程萌新,所以有啥写的 ...

  9. java file取不到linux文件_Java中高级核心知识全面解析——Linux基本命令(切换、增删改查、压缩文件、权限命令)...

    一.目录切换命令 cd usr: 切换到该目录下usr目录 cd ..(或cd../): 切换到上一层目录 cd /: 切换到系统根目录 cd ~: 切换到用户主目录 cd -: 切换到上一个操作所在 ...

最新文章

  1. Setting the Reply-To Header in an Email using CDONTS.NewMail Object and CDO Message
  2. jQuery插件之ajaxFileUpload
  3. 什么?欧洲也有个恩智浦杯?
  4. 动态创建DataGrid的模版列(转)
  5. 基于标准C语言的数字图像处理基本框架(转)
  6. Android服务一 创建启动服务
  7. [设计模式]工厂模式factory
  8. mysql 文件组织_数据库如何组织数据?
  9. linux内存布局和地址空间布局随机化(ASLR)下的可分配地址空间
  10. 离散数学(本)复习题
  11. getbook netty实战_Netty 实战(精髓)简介(Netty in Action)
  12. R语言完成中国裁判文书网最新爬虫
  13. 一台服务器能承载多少用户_干货系列三:一台服务器能承载多少人同时访问?...
  14. 【使用python+selenium实现12306的自动登录及购票】
  15. 为什么技术面过了却挂在了HR面试之”谈谈你的职业生涯规划“
  16. Android studio 配置 jPBC 2.0.0
  17. 计算机二级c语言软件是,我想考计算机二级考C语言,用哪个教材?下载哪个软件?谢谢!!!!...
  18. jpa整合querydsl实现简单查询以及左联查询
  19. px4原生源码学习-(1)
  20. 第四篇 安装系统与多重引导

热门文章

  1. 【网址收藏】本地VSCode编辑远程服务器文件:Remote SSH
  2. 【收藏】HBase集成Phoenix实现类SQL操作hbase
  3. k3s containerd查看镜像命令示例
  4. Java线程池示例:任务窃取线程池WorkStealingPool
  5. Mybatis的@Param注解作用
  6. centos打显卡驱动命令_在Linux系统下安装Nvidia官方显卡驱动的方法
  7. BCompare日志
  8. 强化学习6——Value-based RL和Policy-based RL 的区别
  9. python改变字符串类型_python – Sklearn将字符串类标签更改为int
  10. golang 数组 最后一个_面试必问:Golang高阶Golang协程实现原理