对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 的删除数据以及基本的查询语法,但大多比较简单不能解决我们日常项目中复 ...
随机推荐
- Spring Cloud Eureka 自我保护机制实战分析
前些天栈长在Java技术栈微信公众号分享过 Spring Cloud Eureka 的系列文章: Spring Cloud Eureka 自我保护机制 Spring Cloud Eureka 常用配置 ...
- JVM加载的初始化类
首先Throws(抛出)几个自己学习过程中一直疑惑的问题: 1.什么是类加载?什么时候进行类加载? 2.什么是类初始化?什么时候进行类初始化? 3.什么时候会为变量分配内存? 4.什么时候会为变量赋默 ...
- uibutton 使用settitle后如何修改其中文字对齐方式
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(5, s ...
- 邁向IT專家成功之路的三十則鐵律 鐵律二十五:IT人屈辱之道-十倍奉還
現代人普遍火氣都很大,與人爭論時只要有一點點感到屈辱,便會開始大聲反擊,甚至於暴力相向.至於企業中的人事相鬥,則是典型的來個明爭暗鬥,直到成為老闆眼中的紅人,在逐漸掌握了權力之後再來個內部大清洗,不久 ...
- n*n的正方形网格中有多少个长方形
n*n的正方形网格中有横竖各n+1条直线,其中,任意各取两条都可以组成一个长方形﹙正方形也是长方形﹚.所以长方形个数为C﹙n+2,2﹚×C﹙n+2,2﹚=﹙n+1﹚²n²/4个.如果正方形不算,则N= ...
- Android 测试自定义纯数字软键盘
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...
- AngularJS的ng-repeat显示表格
代码下载:https://files.cnblogs.com/files/xiandedanteng/angualrJSngRepeatTable.rar 代码: <!DOCTYPE HTML ...
- Office 顿号怎么输
中文状态下回车上面一个按键就是
- <LeetCode OJ> 337. House Robber III
Total Accepted: 1341 Total Submissions: 3744 Difficulty: Medium The thief has found himself a new pl ...
- QC3.0快充技术详解
QC3.0 智能手机的电池容量愈来愈大,除了省电能力外,充电速度更成为用户愈来愈重视的特点.高通(Qualcomm)的 Quick Charge 快充技术已成为业界的典范之一,继 Quick Char ...