对于xml的解析,这里学习并演示使用SAXParser进行解析的样例。

使用此种方法无法解析"gb2312"编码的xml文件,因此,此处xml文件编码设置为"UTF-8"

1. person.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>王飞</name>
<college>理工大学</college>
<telephone>2663457</telephone>
<title>教授</title>
</person>

2.java相关代码

import java.io.File;
import java.io.FileReader;
import java.util.Hashtable;

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

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

public class TestParse {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
try {
File file = new File("person.xml");
FileReader reader = new FileReader(file);
// 创建解析工厂实例
SAXParserFactory spf = SAXParserFactory.newInstance();
// 创建解析器
SAXParser sp = spf.newSAXParser();
// 创建处理类实例
SAXHandler handler = new SAXHandler();

// 解析
sp.parse(new InputSource(reader), handler);

// 此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。
Hashtable hashTable = handler.getTable();
// 输出数据
System.out.println("教师信息表");
System.out.println("姓名:"
+ (String) hashTable.get(new String("name")));
System.out.println("学院:"
+ (String) hashTable.get(new String("college")));
System.out.println("电话:"
+ (String) hashTable.get(new String("telephone")));
System.out.println("职称:"
+ (String) hashTable.get(new String("title")));
} catch (Exception e) {
System.out.println(e.getMessage());
}

}

}

// 自定义处理类
class SAXHandler extends DefaultHandler {
@SuppressWarnings("unchecked")
private Hashtable table = new Hashtable();
private String currentElement = null;
private String currentValue = null;

@SuppressWarnings("unchecked")
public Hashtable getTable() {
return table;
}

// 覆盖startElement方法,取出节点标签
public void startElement(String uri, String localName, String qName,
Attributes attributes) {
currentElement = qName;
}

// 覆盖characters方法,取出节点值
public void characters(char[] ch, int start, int length)
throws SAXException {
currentValue = new String(ch, start, length);
}

// 覆盖endElement方法,放入Hashtable
@SuppressWarnings("unchecked")
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (currentElement.equals(qName))
table.put(currentElement, currentValue);
}

}

3.运行结果

SAXParser解析xml文件的更多相关文章

  1. JAVA使用SAX解析XML文件

    在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...

  2. SAX解析xml文件

    需要做一个银行名字的列表. 因为有很多,所以想到了用xml来保存,然后uongDAX解析. public class BankSelectActivity extends BaseActivity{ ...

  3. 用JAXP的SAX方式解析XML文件

    简单用JAXP的SAX方式(事件驱动)解析XML文件: 文件(1.XML) <?xml version="1.0" encoding="UTF-8" st ...

  4. 解析XML文件的几种常见操作方法—DOM/SAX/DOM4j

    解析XML文件的几种常见操作方法—DOM/SAX/DOM4j 一直想学点什么东西,有些浮躁,努力使自己静下心来看点东西,哪怕是回顾一下知识.看到了xml解析,目前我还没用到过.但多了解一下,加深点记忆 ...

  5. SAX方式解析XML文件实例

    books.XML文件: 书籍book.java实体类: public class Book { private String id; private String name; private Str ...

  6. cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)

    今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会 ...

  7. 2017/4/25-SAX解析XML文件

    SAX解析XML 1.分析 SAX是按照XML文件的顺序执行,可以说是边扫描,边解析.所以无须将整个文件加载至内存中. 2.优点 1)占用内存少. 2)解析效率高. 3.缺点 1)只能进行读取. 2) ...

  8. 解析xml文件的四种方式

    什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没 ...

  9. JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)

    1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...

随机推荐

  1. "_OBJC_CLASS_$_MAMapServices", referenced from: 的问题修复

    今天将高德地图集成到ios模拟器编译出现了一个错误 Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_MAMapServic ...

  2. 定制化WinPE

    1 .首先挂载wim Dism /Mount-WIM /WimFile:D:\install.wim /Index: /MountDir:D:\wimmount 2. 如何要修改WinPE的启动项,可 ...

  3. fifteen-puzzle

    http://www.math.ubc.ca/~cass/courses/m308-02b/projects/grant/fifteen.html http://jamie-wong.com/2011 ...

  4. 开启MySQL远程访问权限 允许远程连接

    1.登陆mysql数据库 mysql -u root -p 查看user表 mysql> use mysql;Database changedmysql> select host,user ...

  5. HP中spl_autoload_register函数的用法

    spl_autoload_register(PHP 5 >= 5.1.2) spl_autoload_register - 注册__autoload()函数 说明bool spl_autoloa ...

  6. 在OS X系统中php访问sftp时需要ssh2扩展的安装

    php -v brew install homebrew/php/php55-ssh2 [实现方式] <?php $connection = ssh2_connect('192.168.0.14 ...

  7. js在工作中遇到的一些问题

    前言 js这种语言没有太多封装好的模式或者统一的编程方式,所以一些细节的问题很容易导致bug,那下面就写为:一份坚固的代码是什么样的. 持续更新一下,记一些good case和bug. 事件绑定的选择 ...

  8. (MonoGame从入门到放弃-1) MonoGame环境搭建

    MonoGame在国内的市场应该比较小吧,工作之余想学习一下游戏开发,期间也尝试过多款游戏引擎,如 Cocos2dx Egret layabox之类的,这几个目前主推的都是Js或者ts作为开发语言. ...

  9. Qt msvc 乱码如何解决?

    #ifdef Q_OS_WIN #pragma execution_character_set("UTF-8") #endif

  10. 设置TCP_USER_TIMEOUT参数来判断tcp连接是否断开

    [TOC] 1. bug描述 前段时间遇到这样的一个问题,openstack一个控制节点宕机后,在宕机后一段时间内创建的虚拟机,一直卡在创建中的状态.有的甚至要等到16分钟之后虚拟机才会切换到下一个状 ...