用java sax处理xml文件(DBLP数据集)

本文介绍如何使用Java的SAX解析器处理大型DBLP数据集,避免一次性加载到内存。首先,理解DBLP数据集的结构,接着预处理XML文件,替换特殊字符。然后创建一个继承自`DefaultHandler`的类,重写处理元素的方法。在解析过程中,通过`isend`标志跟踪文档状态,并使用批量插入将数据存储到MySQL数据库,以解决内存溢出问题。完整代码已上传至GitHub。
摘要由CSDN通过智能技术生成

在java中,可以用多种方式处理xml文件。前一段时间因为要使用到dblp数据集,而且这个数据集比较大无法一次性加载到内存中解析成文档树再处理。所以只能用sax的方式边读边处理。

下面是dblp数据集的简介,在处理xml文件之前,对xml的结构的了解很重要:

DBLP是计算机领域内对研究的成果以作者为核心的一个计算机类英文文献的集成数据库系统,按年代列出了作者的科研成果。包括国际期刊和会议等公开发表的论文。DBLP没有提供对中文文献的收录和检索功能,国内类似的权威期刊及重要会议论文集成检索系统有C-DBLP。

这个项目是德国特里尔大学的Michael Ley负责开发和维护。它提供计算机领域科学文献的搜索服务,但只储存这些文献的相关元数据,如标题,作者,发表日期等。和一般流行的情况不同,DBLP并没有使用数据库而是使用XML存储元数据。

DBLP在学术界声誉很高,而且很多论文及实验都是基于DBLP的。所收录的期刊和会议论文质量较高,也比较全面。文献更新速度很快,能很好地反应了国外学术研究的前沿方向。

在下载DBLP数据集后要记得下载dblp.dtd文件,这个文件是对数据集结构的说明:

数据集的根节点是: dblp 二级节点有:article|inproceedings|proceedings|book|incollection|phdthesis|mastersthesis|www 这些节点标识了文献的类型。三级节点有:booktitle ,pages,year。。。。等等,分别标识文献的题目/页数/年份等属性。

我的解析目标是将这个xml文件的数据集解析出来存储到关系型数据库中,比如mysql。


下面简单介绍一下如何再java用sax的方式解析xml文档:

主要需要写一个类继承 org.xml.sax.helpers.DefaultHandler(注意这里并非实现接口)

重写如下方法,这里对方法的作用也进行了说明:

/*用来遍历xml的开始标签
  参数说明:
  uri:标签的命名空间uri,如果标签没有命名空间或者不需要命名空间处理,则为空值
  localName:本地名,不需要命名空间处理则为空
  qName:当前遍历的标签名
  attributes:标签的属性,可以为空
*/
	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub

	}
	
	//用来遍历xml的结束标签
	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		// TODO Auto-generated method stub
		
	}
	/*
	获取标签中间的字符数据。比如对于节点<year>1991</year>获取的即为1991
	ch:字符数据(以字符数组的形式)
	start:字符数组中的起始位置
	length:从起始位置开
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值