对xml文件的sax解析(增删改查)之二
先上代码:
package com.saxparsetest;
//the filename of this file is :saxparse.java
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_2());//第二个参数用于关联下面定义的事件处理类 } } //定义事件处理类
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();
} } //请思考:如何只显示部分元素及属性,如只显示名字,年龄。
//现在再定义一个事件处理类:
class myDefaultHandle_wodelei_2 extends DefaultHandler{ @Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("***********************************");//打印一行分割线
super.startDocument();
} @Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
} @Override
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(""))
{
System.out.println(con);
}
super.characters(ch, start, length);
} @Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
} @Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
} } /*
运行结果:
***********************************
周星驰
23
学习刻苦
林青霞
32
是一个好学生
*/
现在我不想显示介绍部分的文本内容了(学习刻苦,是一个好学生),只想显示姓名和年龄。
package com.saxparsetest;
//the filename of this file is :saxparse.java
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_2());//第二个参数用于关联下面定义的事件处理类 } } //定义事件处理类
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();
} } //请思考:如何只显示部分元素及属性,如只显示名字,年龄。
//现在再定义一个事件处理类:
class myDefaultHandle_wodelei_2 extends DefaultHandler{ private boolean isName=false;
private boolean isAge=false; @Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
} @Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes); if(qName.equals("名字"))
{
this.isName=true;
}
else if(qName.equals("年龄"))
{
this.isAge=true;
}
} @Override
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("")&&isName==true||isAge==true)
{
System.out.println(con);
}
isName=false;
isAge=false;
//super.characters(ch, start, length);
} @Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
} @Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
} } /*
运行结果:
周星驰
23
林青霞
32
*/
对xml文件的sax解析(增删改查)之二的更多相关文章
- 对xml文件的sax解析(增删改查)之一
crud(增删改查): c:creat r:retrieve u:update d:delete 以下笔记来自于韩顺平老师的讲解. 现在是用java来操作. 第一步:新建java工程.file-new ...
- Mybatis实例增删改查(二)
创建实体类: package com.test.mybatis.bean; public class Employee { private Integer id; private String las ...
- abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之一(二十七)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- 通过JDBC进行简单的增删改查(二)
本章笔记更易理解和学习,也是我第一次初学的笔记. package javastudy; import java.sql.Connection; import java.sql.DriverManage ...
- mybatis实现MySQL数据库的增删改查之二
这里直接附上代码: 1 package com.qijian.pojo; 2 3 import org.apache.ibatis.type.Alias; 4 5 6 public class Use ...
- python(13)- 文件处理应用Ⅱ:增删改查
用户选择1,增加功能: 用户输入www.oldboy2.org和server 11111 weight 2222 maxconn 3333后, 在www.oldboy2.org下增加一条server信 ...
- springboot整合mybatis增删改查(二):springboot热部署
SpringBoot整合热部署 传统情况下, 我们用idea运行springboot程序时, 如果我们需要修改类里的方法,或者其他信息 我们需要修改完保存,并且重启springboot,有时候会很浪费 ...
- Mybatis实现增删改查(二)
1. 准备 请先完成Mybatis基本配置(一)的基本内容 2. 查询多条商品信息 1)在com.mybatis.dao.PartDao中增加接口函数 public List<PartInfo& ...
- 基本 SQL 之增删改查(二)
上一篇文章中,我们介绍了 SQL 中最基本的 DML 语法,包括 insert 的插入数据.update 的更新数据.delete 的删除数据以及基本的查询语法,但大多比较简单不能解决我们日常项目中复 ...
随机推荐
- Hdoj 3506 Monkey Party
Discription Far away from our world, there is a banana forest. And many lovely monkeys live there. O ...
- Java-多态的理解(主要是解释一个网上经典的例子)
如题,本文重点不在于介绍什么是多态,所以一些基础的概念就不多说了(需要知道的时候会提一下).要了解多态的话这里推荐一篇 http://www.cnblogs.com/jack204/archive/2 ...
- javascript --- 对象之间的继承
了解这一章之前,先把我们之前讲到的以构造函数创建对象为前提的继承抛到一边. 首先,我们先用一个var o = {}创建一个没有任何属性的空对象作为我们的‘画板’,然互在逐步向这个画板里添加属性,和方法 ...
- Interface Builder中的技巧
在我工作中经常会遇到有人吐槽Xcode中的interface builder(以下简称IB)不好用的开发者.在我看来,IB是一个非常棒的可视化开发工具,可以非常快捷的设置UI控件的大部分常用属性.下面 ...
- 邁向IT專家成功之路的三十則鐵律 鐵律二十八 IT人教學之道-速戰
所謂IT人教學之道是指可善用在工作之中帶領新人快速上手,或是使用在生活中指導他人迅速學會某項技能的重要經驗.相信大家都有當過新手被指導的體驗,也有擔任過資深的老手帶領新人的經驗.然而您可能不知道,即便 ...
- mysql 数据库查询优化
从上图可以看出,计算机系统硬件性能从高到代依次为: CPU——Cache(L1-L2-L3)——内存——SSD硬盘——网络——硬盘 由于SSD硬盘还处于快速发展阶段,所以本文的内容不涉及SSD相关应用 ...
- 细说Redis持久化机制
概述 Redis不仅能够作为缓存来使用,也能够作为内存数据库. Redis作为内存数据库使用时.必需要解决一个问题:数据的持久性.有些将Redis作为缓存使用的场景也需要将缓存的数据持久化到存储介质上 ...
- 控制CUP占用率曲线
在<编程之美>上看过一道面试题就是要求:输出cup占用率的曲线图 今天看到了一篇文章就试试看看: #include <iostream> #include <cmath& ...
- jquery获取<div></div>之间的内容.text() 和 .html()区别
jQuery 获取 div 之间的内容,有两种方法,$(selector).text().$(selector).html() . html: <div> <p>test< ...
- uva 11248 Frequency Hopping (最大流)
uva 11248 Frequency Hopping 题目大意:给定一个有向网络,每条边均有一个容量. 问是否存在一个从点1到点N.流量为C的流.假设不存在,能否够恰好改动一条弧的容量,使得存在这种 ...