package com.huawei.xml;

import java.io.InputStream;
import java.util.Stack;

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;

/**
* @author Administrator
*
* 测试 sax解析
*
*/
public class TestSAXParser {

public static void main(String[] args) throws Exception{
/**
* 得到工厂
*
* 用工厂得到解析器
*
* 用解析器去解析文件 并注册一个处理器
*
*/

//得到工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//得到解析器
SAXParser saxParser = factory.newSAXParser();

InputStream in = TestSAXParser.class.getClassLoader().getResourceAsStream("com/cdsxt/resources/Users.xml");

saxParser.parse(in,new Handler());
}
}

class Handler extends DefaultHandler{

/**
* 首先是文档开始 startDocument
* 元素开始startElement
* 字符数据characters
* 元素结束endElement
* 文档结束endDocument
*/

//构建一个存储器
Stack<String> names = new Stack<String>();

@Override
public void startDocument() throws SAXException {
//System.out.println("Handler.startDocument()");
}

@Override
public void endDocument() throws SAXException {
//System.out.println("Handler.endDocument()");
}

@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//System.out.println("Handler.startElement()");
/*System.out.println("----------------");
System.out.println("uri:"+uri);
System.out.println("localName:"+localName);
System.out.println("attributes:"+attributes.getValue("id"));
System.out.println("----------------");*/
//System.out.println("qName:"+qName);
names.push(qName);
}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//System.out.println("Handler.endElement()");
names.pop();
}

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//System.out.println("Handler.characters()");

if(names.peek().equals("username")){
System.out.println(new String(ch,start,length));
}

}

}

XML解析的二种方法之Sax解析的更多相关文章

  1. XML解析的二种方法之dom解析

    XML解析的二种方法:dom解析和sax解析 文件大小      存储位置          读取速度 dom解析     小文件      放在内存中              快 sax解析   ...

  2. 解析XML的几种方法之SAX解析

    假期总结不能停,坚持坚持....接下来总结一下XMl和json的解析和生成.. 解析XML的四种方法,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址: DOM:在现 ...

  3. python实现XML解析的三种方法

    python实现XML解析的三种方法 三种方法:一是xml.dom.*模块,它是W3C DOM API的实现,若需要处理DOM API则该模块很适合:二是xml.sax.*模块,它是SAX API的实 ...

  4. PHP怎么读写XML?(四种方法)

    PHP怎么读写XML?(四种方法) 一.总结 1.这四种方法中,字符串的方式是最原始的方法.SimpleXML和DOM扩展是属于基于树的解析器,把整个文档存储为树的数据结构中,需要把整个文档都加载到内 ...

  5. IIS7.5使用web.config设置伪静态的二种方法

    转自 网上赚钱自学网 .http://www.whosmall.com/post/121 近几天公司里开发的项目有几个运行在IIS7.5上,由于全站采用的是伪静态,因此从网上找到两两种方法来实现.这两 ...

  6. Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解

    Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解 一.Jquery遍历筛选数组 1.jquery grep()筛选遍历数组 $().ready( function(){ v ...

  7. mysql 远程连接数据库的二种方法

    http://blog.csdn.net/freecodetor/article/details/5799550 一.连接远程数据库: 1.显示密码 如:MySQL 连接远程数据库(192.168.5 ...

  8. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  9. mysql 远程连接数据库的二种方法

    一.连接远程数据库: 1.显示密码 如:MySQL 连接远程数据库(192.168.5.116),端口"3306",用户名为"root",密码"123 ...

随机推荐

  1. 前端ps切图,图文教程,详细。

    https://blog.csdn.net/OBKoro1/article/details/69817571 1.下载 我现在使用的版本号:PS-CS6,网上很多破解版本的自行搜索下载. 2.安装好P ...

  2. JavaScript基本概要

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  3. ios 怎么禁止点击子视图的时候不响应父视图的点击事件

    方法一 可以在触发手势的方法里添加一个区域的判断,如果点击区域正好是子视图的区域,则过滤掉,不处理此时的手势,如果点击的区域没有被子视图覆盖则,处理手势的事件.具体的代码如下:  if( CGRect ...

  4. person小项目

    所用的IDE为idea,数据库用的是Navicat for MySQL. 好了,开始正题,今天要做person小项目,有以下几个步骤: Navicat for MySQL数据库的构建,以及如何建per ...

  5. 2018-2019-2 《网络对抗技术》Exp3免杀原理与实践 20165222

    1. 实践内容  1.1 正确使用msf编码器 使用 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 7 -b ...

  6. 浅谈闭包(Closure)

    一.闭包 好长时间对于闭包都知道与函数和其环境变量有关系,但是一直没有一个清晰的认识.今天查看了一下维基百科,顺便写下来. 二.闭包的定义 在编程语言中,闭包(语义闭包或函数闭包)是指哪些可以将语义范 ...

  7. 【java多线程】ConCurrent并发包 - Lock详解

    synchronized的缺陷   我们知道,可以利用synchronized关键字来实现共享资源的互斥访问. Java 5在java.util.concurrent.locks包下提供了另一种来实现 ...

  8. 【转】Visual Studio 2012常用快捷键总结

    原文网址:http://blog.csdn.net/yl2isoft/article/details/9886379 写在前面: 都知道,合理使用快捷键可以提高开发效率.但是Visual Studio ...

  9. php switch case的"bug"

    首先说明,这不是一个bug.应该说是一个比较容易中招的陷阱. 今天使用switch遇到一个问题,代码如下: <?php $num = 0; switch ($price) { case $pri ...

  10. CentOS 6.5 下Nginx服务的安装与配置

    参考网站: http://www.cnblogs.com/zhuhongbao/archive/2013/06/04/3118061.html http://www.cnblogs.com/jilia ...