java解析xml之sax解析xml示例分享

 更新时间:2014年01月05日 09:50:27   作者:  
SAX基于事件的解析,解析器在一次读取XML文件中根据读取的数据产生相应的事件,由应用程序实现相应的事件处理逻辑,即它是一种“推”的解析方式;这种解析方法速度快、占用内存少,但是它需要应用程序自己处理解析器的状态,实现起来会比较麻烦

复制代码 代码如下:

package com.test;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

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 SaxXML {

    public static void main(String[] args) {
        File file = new File("e:/People.xml");
        try {
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser parser = spf.newSAXParser();
            SaxHandler handler = new SaxHandler("People");
            parser.parse(new FileInputStream(file), handler);

            List<People> peopleList = handler.getPeoples();
            for(People people : peopleList){
                System.out.println(people.getId()+"\t"+people.getName()+"\t"+people.getEnglishName()+"\t"+people.getAge());
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

class SaxHandler extends DefaultHandler {
    private List<People> peoples = null;
    private People people;
    private String currentTag = null;
    private String currentValue = null;
    private String nodeName = null;

    public List<People> getPeoples() {
        return peoples;
    }

    public SaxHandler(String nodeName) {
        this.nodeName = nodeName;
    }

    @Override
    public void startDocument() throws SAXException {
        // TODO 当读到一个开始标签的时候,会触发这个方法
        super.startDocument();

        peoples = new ArrayList<People>();
    }

    @Override
    public void endDocument() throws SAXException {
        // TODO 自动生成的方法存根
        super.endDocument();
    }

    @Override
    public void startElement(String uri, String localName, String name,
            Attributes attributes) throws SAXException {
        // TODO 当遇到文档的开头的时候,调用这个方法
        super.startElement(uri, localName, name, attributes);

        if (name.equals(nodeName)) {
            people = new People();
        }
        if (attributes != null && people != null) {
            for (int i = 0; i < attributes.getLength(); i++) {
                if(attributes.getQName(i).equals("id")){
                    people.setId(attributes.getValue(i));
                }
                else if(attributes.getQName(i).equals("en")){
                    people.setEnglishName(attributes.getValue(i));
                }
            }
        }
        currentTag = name;
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // TODO 这个方法用来处理在XML文件中读到的内容
        super.characters(ch, start, length);

        if (currentTag != null && people != null) {
            currentValue = new String(ch, start, length);
            if (currentValue != null && !currentValue.trim().equals("") && !currentValue.trim().equals("\n")) {
                if(currentTag.equals("Name")){
                    people.setName(currentValue);
                }
                else if(currentTag.equals("Age")){
                    people.setAge(currentValue);
                }
            }
        }
        currentTag = null;
        currentValue = null;
    }

    @Override
    public void endElement(String uri, String localName, String name)
            throws SAXException {
        // TODO 在遇到结束标签的时候,调用这个方法
        super.endElement(uri, localName, name);

        if (name.equals(nodeName)) {
            peoples.add(people);
        }
    }

}

相关文章

  • 浅谈Java实现回溯算法之八皇后问题

    浅谈Java实现回溯算法之八皇后问题

    八皇后问题是一个古老而又著名的问题,是学习回溯算法的一个经典案例。今天我们就一起来探究一下吧
    2021-06-06
  • Java web项目中的强制登录功能实现代码

    Java web项目中的强制登录功能实现代码

    本文给大家分享Java web项目中的强制登录功能实现代码,为了避免直接进入项目中存在的页面,使用filter过滤器,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • SpringBoot整合阿里 Druid 数据源的实例详解

    SpringBoot整合阿里 Druid 数据源的实例详解

    这篇文章主要介绍了SpringBoot整合阿里 Druid 数据源,主要讲解了手动配置方法,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • Java修改maven的默认jdk版本为1.7的方法

    Java修改maven的默认jdk版本为1.7的方法

    这篇文章主要介绍了Java修改maven的默认jdk版本为1.7的方法,需要的朋友可以参考下
    2018-02-02
  • Java使用PDFBox渲染生成pdf文档的代码详解

    Java使用PDFBox渲染生成pdf文档的代码详解

    使用PDFBox可以渲染生成pdf文档,并且自定义程度高,只是比较麻烦,这篇文章将为大家详细介绍一下具体的实现方法,感兴趣的小伙伴可以参考一下
    2025-04-04
  • Java日期时间字符串和毫秒相互转换的方法

    Java日期时间字符串和毫秒相互转换的方法

    这篇文章主要为大家详细介绍了Java日期时间字符串和毫秒相互转换的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Java的Jackson库的使用及其树模型的入门学习教程

    Java的Jackson库的使用及其树模型的入门学习教程

    这篇文章主要介绍了Java的Jackson库的使用及其树模型入门学习教程,Jackson库通常被用来作Java对象和JSON的互相转换,需要的朋友可以参考下
    2016-01-01
  • 详解Java如何优雅的处理异常

    详解Java如何优雅的处理异常

    在编写 Java 程序的过程中,有一种异常几乎每个开发者都会遇到——空指针异常(NullPointerException),那么我们应该如何有效且优雅的处理空指针异常呢,下面小编就来详细介绍这个处理方案吧
    2023-08-08
  • Java数据结构篇之实现二叉搜索树的核心方法

    Java数据结构篇之实现二叉搜索树的核心方法

    二叉搜索树是一种常用的数据结构,它是一棵二叉树,且每个节点的值都大于其左子树中任何节点的值,而小于其右子树中任何节点的值,这篇文章主要给大家介绍了关于Java数据结构篇之实现二叉搜索树的核心方法,需要的朋友可以参考下
    2023-12-12
  • WebService教程详解(一)

    WebService教程详解(一)

    WebService,顾名思义就是基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求,接下来通过本文给大家介绍WebService教程详解(一),对webservice教程感兴趣的朋友一起学习吧
    2016-03-03

最新评论