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 stub
System.out.println("发现文档开始的函数:startDocument()");
super.startDocument();
} @Override//该函数顺序发现xml文件中的元素(【推的机制】):
public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {
// TODO Auto-generated method stub
System.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
super.characters(ch, start, length);
} @Override//该函数发现xml文件中一个元素的结束(即发现这样的标签:</xx>):
public void endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
} @Override//该函数发现整个xml文件的结束:
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
System.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 stub
System.out.println("发现文档开始的函数:startDocument()");
super.startDocument();
} @Override//该函数顺序发现xml文件中的元素(【推的机制】):
public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {
// TODO Auto-generated method stub
System.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 stub
super.endElement(uri, localName, qName);
} @Override//该函数发现整个xml文件的结束:
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
System.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 stub
System.out.println("发现文档开始的函数:startDocument()");
super.startDocument();
} @Override//该函数顺序发现xml文件中的元素(【推的机制】):
public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {
// TODO Auto-generated method stub
System.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
String 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 stub
super.endElement(uri, localName, qName);
} @Override//该函数发现整个xml文件的结束:
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
System.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 stub
System.out.println("发现文档开始的函数:startDocument()");
super.startDocument();
} @Override//该函数顺序发现xml文件中的元素(【推的机制】):
public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {
// TODO Auto-generated method stub
System.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
String 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 stub
super.endElement(uri, localName, qName);
} @Override//该函数发现整个xml文件的结束:
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("发现文档结束的函数:endDocument()");
super.endDocument();
} } /*
运行结果:
发现文档开始的函数:startDocument()
元素名称=班级
元素名称=学生
元素名称=名字
周星驰
元素名称=年龄
23
元素名称=介绍
学习刻苦
元素名称=学生
元素名称=名字
林青霞
元素名称=年龄
32
元素名称=介绍
是一个好学生
发现文档结束的函数:endDocument()
*/

小结:sax技术的一个缺陷是不能对xml文件进行增、删、改,它主要用来对xml文件进行遍历解析。

对xml文件的sax解析(增删改查)之一的更多相关文章

  1. 对xml文件的sax解析(增删改查)之二

    先上代码: package com.saxparsetest; //the filename of this file is :saxparse.java import javax.xml.parse ...

  2. python(13)- 文件处理应用Ⅱ:增删改查

    用户选择1,增加功能: 用户输入www.oldboy2.org和server 11111 weight 2222 maxconn 3333后, 在www.oldboy2.org下增加一条server信 ...

  3. SSMybatis整合 --详细解读Mybatis对oracle数据库进行增删改查(一)

    Mybatis是现在主流的持久化层框架,与Hibernate不同的是,它鼓励程序员使用原声SQL语句对数据库进行操作.因此提供了非常灵活的功能.特别是当数据库同时访问数过多,需要进行优化时,使用sql ...

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

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

  5. Mybatis的简单增删改查

    刚开始学习Mybatis可以先看下官方文档,MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis避免了几乎所有的JDBC代码和手工设置参数以及抽取结果集.MyBat ...

  6. NetCore2.0 RozarPage自动生成增删改查

    原文链接:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/web-api-help-pages-using-swagger 上面的只是原文 ...

  7. 用dom4j解析xml文件并执行增删改查操作

    转自:https://www.aliyun.com/jiaocheng/1339446.html xml文件: <?xml version="1.0" encoding=&q ...

  8. java对xml文件做增删改查------摘录

    java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...

  9. 使用dom4j对xml文件进行增删改查

    1.使用dom4j技术对dom_demo.xml进行增删改查 首选要下载dom4j的jar包 在官网上找不到,网上搜索了一下在这个链接:http://sourceforge.net/projects/ ...

随机推荐

  1. spring-aop AnnotationAwareAspectJAutoProxyCreator类

    类图结构如上所示.

  2. 左偏树 / 非旋转treap学习笔记

    背景 非旋转treap真的好久没有用过了... 左偏树由于之前学的时候没有写学习笔记, 学得也并不牢固. 所以打算写这么一篇学习笔记, 讲讲左偏树和非旋转treap. 左偏树 定义 左偏树(Lefti ...

  3. html中的列表标签

    1.<dl>定义列表,<dt>定义列表中的项目,<dd>对项目的描述 例: 效果: 2.<ul>无序列表,<li>列表项 例: 效果: 3. ...

  4. 提高在Xcode上的工作效率

    对于在Xcode上提高工作效率,内功在这不提,对于外力,我将它分为三类: 工具.快捷键和小技巧.主要获得的路径是通过平时积累和看 WWDC12 上的 Session 402:Working Effic ...

  5. 【windows】windows下的hosts文件位置

  6. linux删除空行操作:awk、grep、tr、sed

    如下:如何删除空行 shen\nshen\\n sen seh sehe she she 真正删除空行,可以使用vim: 通过命令模式删除空行.vim在命令模式下(在vim里输入英文字符:进入命令模式 ...

  7. sql的一些知识_order by

    注释 SELECT name FROM userinfo #这是注释 /* 这是多行注释 */ order by 排序() SELECT username FROM userinfo ORDER BY ...

  8. 辛星浅析raid

    我们来分析一下影响计算机性能的主要组件,主要就是CPU.主板的总线IO.内存IO.硬盘IO.网卡IO等等,并且如今CPU的性能已经非常好了,可是计算机的总体的IO性能却较低,严重影响了计算机的性能,如 ...

  9. sql server 2008出现远程过程调用失败

    sql server  2008出现远程过程调用失败解决方式有下面几种: 1.依照网上说的方法.是由于装了vs 2012或是vs2013或是vs2015等高版本号时.安装了Microsoft SQL ...

  10. lucene 自定义评分 (给lucene自带的评分*我们filed的系数) 如搜索结果时间的加权

    参见孔浩 lucene 22讲 步骤 1.写一个类继承于 CostomScoreQuery -->覆盖getCostomSorceProvider 方法 2.写一个自己的provider(重写c ...