SAX解析xml

2023-11-08


第一步:创建xml

<?xml version="1.0" encoding="utf-8"?>
<students>
   <student stno="101">
        <stName>张三</stName>
		<age>23</age>
		<address>河北省邯郸市</address>
		<birthday>2000-10-10</birthday>
   </student>
   <student stno="102">
        <stName>王小二</stName>
		<age>26</age>
		<address>辽宁省大连市</address>
		<birthday>2000-10-10</birthday>
   </student>
   <student stno="103">
        <stName>王小三</stName>
		<age>28</age>
		<address>河北张家口</address>
		<birthday>2001-10-10</birthday>
   </student>
   <student stno="104">
        <stName>李小虎</stName>
		<age>25</age>
		<address>河北省邯郸市</address>
		<birthday>2000-10-10</birthday>
   </student>

</students>


第二部:创建实体类

package com.bochy.test;


public class Student {
   private String stno;
   private String stName;
   private Integer age;
   private String address;
   private String birthday;
public String getStName() {
	return stName;
}
public void setStName(String stName) {
	this.stName = stName;
}
public Integer getAge() {
	return age;
}
public void setAge(Integer age) {
	this.age = age;
}
public String getAddress() {
	return address;
}
public void setAddress(String address) {
	this.address = address;
}
public String getBirthday() {
	return birthday;
}
public void setBirthday(String birthday) {
	this.birthday = birthday;
}
public String getStno() {
	return stno;
}
public void setStno(String stno) {
	this.stno = stno;
}
   
}


第三部:创建工具类

package com.bochy.test;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * 定义解析规则的工具类
 * 采用Sax解析方式解析XML文件
 * */
public class SaxParseUtils extends DefaultHandler{
    //重写相关方法定义解析的规则

	private List<Student> list=null;
	private Student student=null;
	private String xmlTag;//读取到的节点名称
	

	//xml文本文件开始加载时执行的方法
	@Override
	public void startDocument() throws SAXException {
		 list=new ArrayList<Student>();//文件开始加载时,此时实例化存储学生信息的list集合
		 
	}

	//xml文件加载结束后执行的方法
	@Override
	public void endDocument() throws SAXException {
		 
	}

	//遇到xml文件中开始标签节点执行的方法
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		 xmlTag=qName;
		 if(qName.equals("student")){//如果此时遇到的是student标签
			 student=new Student();
			 String stno=attributes.getValue("stno");//获取stno属性值
			// System.out.println("stno:"+stno);
			 student.setStno(stno);//封装学生编号 
		 }
			
	}

	//遇到xml文件中结束标签执行的方法
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		xmlTag="";
		if(qName.equals("student")){
			list.add(student);
		}
		
		 
	}

	//用于获取节点中文本内容的方法(实际用是获取文本内容,其实是将整体xml文件所有字符都放进了ch中)
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		String contentText= String.valueOf(ch, start, length);//获取stName的文本内容
		 if(xmlTag.equals("stName")){	
			student.setStName(contentText);		 
		 }
		 if(xmlTag.equals("age")){
			 student.setAge(Integer.parseInt(contentText));
		 }
		 if(xmlTag.equals("address")){
			 student.setAddress(contentText);
		 }
		 if(xmlTag.equals("birthday")){
			 student.setBirthday(contentText);
		 }
		 
	}
	
	    //获取解析后数据
		public List<Student> getList(){
			
			return this.list;
		}
	
}
第四部:创建测试类

package com.bochy.test;

import java.io.InputStream;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

public class Test {

	/**
	 *  Sax解析
	 * @throws SAXException 
	 * @throws ParserConfigurationException 
	 */
	public static void main(String[] args) throws Exception {
		//通过getClassLoader类加载器,相对路径找资源,此时找src路径下文件内容:
	   InputStream inputStream= Test.class.getClassLoader().getResourceAsStream("com/bochy/test/Students.xml");
       
	   //定义解析工厂
	   SAXParserFactory parserFactory= SAXParserFactory.newInstance();//实例化解析工厂
	   
	   //创建解析器
	   SAXParser saxParser= parserFactory.newSAXParser();
	   
	   //实例化解析规则
	   SaxParseUtils utils=new SaxParseUtils();
	   
	   //解析
	   saxParser.parse(inputStream, utils);
	   
	   List<Student> list=utils.getList();
	   for(int i=0;i<list.size();i++){
		   Student stu=list.get(i);
		   System.out.println(stu.getStno()+":"+stu.getStName()+":"+stu.getAge()+":"+stu.getAddress()+":"+stu.getBirthday());
	   }
	      
	}

}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SAX解析xml 的相关文章

随机推荐

  • 安装使用MMDeploy(Python版)

    安装使用MMDeploy Python版 一 安装 MMDeploy python mmdeploy main tools deploy py mmdeploy main configs mmdet detection detection
  • 蓝牙的知识总结(1)

    1 SoC System on Chip 称为系统级芯片 一个产品 是一个有专用目标的集成电路 其中包含完整系统并有嵌入软件的全部内容 同时它又是一种技术 用以实现从确定系统功能开始 到软 硬件划分 并完成设计的整个过程 从狭义角度讲 它是
  • 【算法】字符串算法题——回文(学习篇)

    验证回文串 给定一个字符串 验证它是否是回文串 只考虑字母和数字字符 可以忽略字母的大小写 说明 本题中 我们将空字符串定义为有效的回文串 示例 1 输入 A man a plan a canal Panama 输出 true 解释 ama
  • BlocklyGame (编译方法)分析

    先列出以下几个位置 本人用的是linux BlocklyGame源码位置 https github com google blockly games 获取源码 git clone https github com google blockl
  • Web 基础 之 Eclipse 中如何把新建的 jsp 文件默认的编码格式(ISO-8859-1)修改为 UTF-8,避免中文乱码

    Web 基础 之 Eclipse 中如何把新建的 jsp 文件默认的编码格式 ISO 8859 1 修改为 UTF 8 避免中文乱码 目录 Web 基础 之 Eclipse 中如何把新建的 jsp 文件默认的编码格式 ISO 8859 1
  • 网络安全中机器学习大合集

    目录 数据集 论文 书籍 演讲 教程 课程 杂项 数据集 安全相关数据样本集 DARPA 入侵检测数据集 Stratosphere IPS 数据集 开放数据集 NSA 的数据捕获 ADFA 入侵检测数据集 NSL KDD 数据集 恶意 UR
  • arm ldr/ld/数据加载系列指令和adr指令

    ldrb指令 1 语法 armv7手册语法 LDRB
  • Android中收听特定应用安装成功的广播

    一 manifest的配置
  • C语言当中的分段函数求解

    对于学习C语言的小白来说 经常会遇到求解分段函数的问题 下面是小编写的一段求解分段函数的代码 希望对于初学的你们有所帮助 代码求解的分段函数为 y f x 4x 3 x lt 15 y f x 2 5x 10 5 x gt 15 inclu
  • 网络编程--TCP/IP协议(一)

    目录 前言 一丶网络基础 lt 1 gt 认识IP地址 1 gt 具体格式 2 gt 组成 3 gt 分类 4 gt 子网掩码 lt 2 gt 认识MAC地址 二丶网络设备及相关技术 lt 1 gt 物理层 集线器 lt 2 gt 数据链路
  • C++:实现计算贷款支付额问题

    计算月支付额的公式如下 月支付额 贷款总额 月利率 1 1 1 月利率 年数 12 include
  • win10使用腾讯会议软件没声音怎么解决

    购买了一个USB接口的带微麦网络摄像头 在win10电脑上打开腾讯会议软件进入会议后讲话始终没有声音输出 经尝试 排除麦克风和声卡音箱硬件和驱动的原因之后 Win10操作系统上腾讯会议麦克风能接收到输入但没有声音播出 一般会是麦克风设置和w
  • 什么是数据产品,如何设计一款好用的数据产品

    何为数据产品 从广义上讲 一切以数据作为驱动或者核心的都叫数据产品 例如数据报表平台 DMP 搜索与精准化产品 风控产品等等 从狭义上讲 就是公司的内部数据平台 今天和大家讨论的 主要是关于公司的内部数据平台的搭建 公司的内部数据平台 主要
  • 【满分】【华为OD机试真题2023B卷 JAVA&JS】计算最大乘积

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 计算最大乘积 知识点字符串位运算 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 给定一个元素类型为小写字符串的数组 请计算两个没有相同字符的元素 长度乘积的最大值 如果
  • GAN网络系列博客(一):用于人脸生成的StyleGAN结构

    目录 简介 基于风格的生成器 生成器的性质 总结 Reference 在未来的一段时间 我会开一个小专题 来介绍下GAN网络的一些经典论文 希望对那些想要入坑的同学提供一点点帮助 考虑到StyleGAN系列论文在相关领域的影响力 我们首先来
  • QT 多线程实现方式

    前因 当调用QApplication exec 时 就启动了QT的事件循环 在开始的时候QT会发出一些事件命令来显示和绘制窗口部件 在这之后 事件循环就开始运行 它不断检查是否有事件发生并且把这些事件发生给应用程序的QObject 当处理一
  • 微信小程序使用van-tabs组件,ios真机z-index层级错乱问题【已解决,ios自定义组件层级不穿透】

    一 这是模拟器上的效果 二 这是苹果11真机上的效果 安卓真机正常 三 先来理一下代码的层级现状 A 为van tabs B 是自定义组件 为数据列表 C为单个数据 D 也是自定义组件 图中省略 为单个数据详情弹窗 且D是B的子组件 在z
  • 题目0158-快递业务站

    快递业务站 题目描述 快递业务范围有 N 个站点 A 站点与 B 站点可以中转快递 则认为 A B 站可达 如果 A B 可达 B C 可达 则 A C 可达 现在给 N 个站点编号 0 1 n 1 用 s i j 表示 i j 是否可达
  • 信任的机制——区块链

    区块链是一个从顶向下实现的一项技术 是可以设计 可以编程的 区块链是一个信任的机器 是在完全不信任的节点之间建立信任机制的技术 是利用互联网传递价值的一种价值网络 这是一个把时间当朋友的技术 区块链在应用的过程中通过自身的设计 解决的问题
  • SAX解析xml

    第一步 创建xml