`
y8820960
  • 浏览: 116406 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

SAX解析XML实例

    博客分类:
  • XML
 
阅读更多
student.xml:
<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student>
		<name>Stone</name>
		<age>26</age>
		<sex>男</sex>
		<address>北京</address>
	</student>
	<student>
		<name>Snow</name>
		<age>24</age>
		<sex>女</sex>
		<address>北京</address>
	</student>
</students>

解析器:
package com.xml;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Stack;

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

@SuppressWarnings("unchecked")
public class SAXForXML extends DefaultHandler
{
    private Stack tags = new Stack();
    
    private Map contents = new LinkedHashMap();
    
    public int count = 0;
    
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException
    {
        // TODO Auto-generated method stub
        String tag = (String)tags.peek();
        if ("name".equals(tag))
        {
            String name = new String(ch, start, length);
            contents.put("name" + count, name);
        }
        if ("sex".equals(tag))
        {
            String sex = new String(ch, start, length);
            contents.put("sex" + count, sex);
        }
        if ("age".equals(tag))
        {
            String age = new String(ch, start, length);
            contents.put("age" + count, age);
        }
    }
    
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException
    {
        // TODO Auto-generated method stub
        if ("student".equals(qName))
        {
            count++;
        }
        tags.push(qName);
    }
    
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException
    {
        // TODO Auto-generated method stub
        tags.pop();
    }
    
    public Map getContents()
    {
        return contents;
    }
}

测试类:
package com.xml;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;

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

import org.xml.sax.SAXException;

public class Test
{
    public static void main(String[] args)
    {
        SAXForXML saxForXML = new SAXForXML();
        try
        {
            SAXParserFactory saxFactory = SAXParserFactory.newInstance();
            SAXParser sp = saxFactory.newSAXParser();
            sp.parse(new File("src/student.xml"), saxForXML);
            Map contents = saxForXML.getContents();
            Iterator keys = contents.keySet().iterator();
            while(keys.hasNext()) {
                String key = (String)keys.next();
                System.out.println(key + ":" + contents.get(key));
            }
        }
        catch (ParserConfigurationException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (SAXException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

分享到:
评论

相关推荐

    SAX解析XML文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...

    sax解析xml实例

    ### SAX 解析 XML 实例详解 #### 一、SAX 解析器简介 SAX (Simple API for XML) 是一种基于事件驱动模型的 XML 解析技术。与 DOM (Document Object Model) 解析不同,SAX 不会将整个 XML 文档加载到内存中,而是...

    读取RSS-SAX解析XML实例(java版)

    标题"读取RSS-SAX解析XML实例(java版)"所涉及的知识点主要集中在两个方面:一是如何读取RSS(Really Simple Syndication)数据,二是使用SAX解析XML文件。 RSS是一种用于发布新闻、博客和其他定期更新内容的格式...

    Servlet利用SAX解析XML文档

    本主题将深入探讨如何在Servlet中利用SAX解析XML文档。 首先,我们需要了解SAX解析的基本原理。SAX解析器不创建整个XML文档树,而是当遇到XML文档的各个部分(如元素、属性、文本等)时,触发相应的事件回调函数。...

    android 使用Sax解析XML 源码实例

    下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...

    Sax解析xml文件

    以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...

    sax解析xml尤其是获取元素的值或者内容

    在使用SAX解析XML前,需要创建一个解析器实例。Java中,可以使用`SAXParserFactory`来生成`SAXParser`,然后调用`parse()`方法解析XML文件。例如: ```java SAXParserFactory factory = SAXParserFactory.new...

    sax解析xml文件

    总结来说,"saxloadxml"项目提供了使用SAX解析XML文件的一个实例,可以帮助开发者了解如何利用SAX解析器处理XML文档,尤其是在性能和内存使用方面有较高要求的情况下。通过学习和实践这个项目,你可以提升处理XML...

    Android SAX、DOM、Pull解析xml文件案例讲解

    以下是使用SAX解析XML的基本步骤: - 创建`DefaultHandler`子类,重写关键方法如`startElement`、`endElement`和`characters`。 - 实例化`SAXParserFactory`,然后获取`SAXParser`。 - 使用`parse`方法解析XML文件...

    sax解析xml本地读取xml

    标题“sax解析xml本地读取xml”指的是使用SAX解析器来读取和解析存储在本地文件系统中的XML文件。这种方式适用于处理那些无法一次性加载到内存中的大型XML文档,或者对于内存有限的环境。 SAX解析的基本工作原理...

    一个关于sax解析xml的demo

    这个"Project1231_001_XML_SAX"可能包含了一个简单的XML文件和对应的SAX解析示例代码,通过运行这个项目,开发者可以了解如何在实际应用中使用SAX解析XML数据,以及如何处理XML文档中的不同结构。学习和理解SAX解析...

    java解析xml数据---sax解析器

    以下是使用SAX解析XML的基本步骤: 1. 创建一个实现DefaultHandler或ContentHandler接口的类,重写其中的方法,如startElement()、endElement()和characters(),用于处理XML文档的结构和数据。 2. 实例化SAX解析器...

    sax解析xml

    下面我们将深入探讨SAX解析XML的相关知识点。 1. **SAX解析器的初始化**:在Java中,我们通常使用`org.xml.sax.parsers.SAXParserFactory`类来创建并配置SAX解析器。首先,我们需要实例化一个SAXParserFactory对象...

    anroid SAX解析xml文件及实例

    以下是对SAX解析XML在Android中的详细解释以及实例代码分析。 **一、SAX解析XML原理** 1. **事件驱动**:SAX解析器在读取XML文档时,会调用预先定义好的处理器接口(如`DefaultHandler`)中的方法,如`...

    Dom,Sax,Xpath解析XML实例

    在实际开发中,XPath常与DOM或SAX结合使用,先由DOM或SAX解析XML,然后用XPath进行查询。 实例应用: 假设我们有一个XML文件,内容如下: ```xml &lt;name&gt;John Doe &lt;position&gt;Manager &lt;name&gt;Jane Smith ...

Global site tag (gtag.js) - Google Analytics