`
pengfeifei26
  • 浏览: 243114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java 对xml进行sax解析

    博客分类:
  • java
 
阅读更多

import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.List;  
	  
import org.xml.sax.Attributes;  
import org.xml.sax.SAXException;  
import org.xml.sax.helpers.DefaultHandler;  
	  
	public class SaxHandler extends DefaultHandler {  
		/* 此方法有三个参数 
	       arg0是传回来的字符数组,其包含元素内容 
	       arg1和arg2分别是数组的开始位置和结束位置 */ 
	    @Override 
	    public void characters(char[] arg0, int arg1, int arg2) throws SAXException { 
	        String content = new String(arg0, arg1, arg2); 
	        System.out.println(content); 
	        super.characters(arg0, arg1, arg2); 
	    } 

	    @Override 
	    public void endDocument() throws SAXException { 
	        System.out.println("\n…………结束解析文档…………"); 
	        super.endDocument(); 
	    } 

	    /* arg0是名称空间 
	       arg1是包含名称空间的标签,如果没有名称空间,则为空 
	       arg2是不包含名称空间的标签 */ 
	    @Override 
	    public void endElement(String arg0, String arg1, String arg2) 
	            throws SAXException { 
	        System.out.println("结束解析元素  " + arg2); 
	        super.endElement(arg0, arg1, arg2); 
	    } 

	    @Override 
	    public void startDocument() throws SAXException { 
	        System.out.println("…………开始解析文档…………\n"); 
	        super.startDocument(); 
	    } 

	    /*arg0是名称空间 
	      arg1是包含名称空间的标签,如果没有名称空间,则为空 
	      arg2是不包含名称空间的标签 
	      arg3很明显是属性的集合 */
	    @Override
	    public void startElement(String arg0, String arg1, String arg2, 
	            Attributes arg3) throws SAXException { 
	        System.out.println("开始解析元素 " + arg2); 
	        if (arg3 != null) { 
	            for (int i = 0; i < arg3.getLength(); i++) { 
	                 // getQName()是获取属性名称, 
	                System.out.print(arg3.getQName(i) + "=\"" + arg3.getValue(i) + "\""); 
	            } 
	        } 
	        System.out.print(arg2 + ":"); 
	        super.startElement(arg0, arg1, arg2, arg3); 
	    } 
	  
	} 


import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.List;  
	  
import org.xml.sax.Attributes;  
import org.xml.sax.SAXException;  
import org.xml.sax.helpers.DefaultHandler;  
	  
	public class SaxHandler extends DefaultHandler {  
	    private HashMap<String, String> map = null;  
	    private List<HashMap<String, String>> list = null;  
	    /** 
	     * 正在解析的元素的标签 
	     */  
	    private String currentTag = null;  
	    /** 
	     * 正在解析的元素的值 
	     */  
	    private String currentValue = null;  
	    private String nodeName = null;  
	      
	    public List<HashMap<String, String>> getList(){  
	        return list;  
	    }  
	  
	    public SaxHandler(String nodeName) {  
	        this.nodeName = nodeName;  
	    }  
	  
	    @Override  
	    public void startDocument() throws SAXException {  
	        // TODO 当读到一个开始标签的时候,会触发这个方法  
	        list = new ArrayList<HashMap<String,String>>();  
	    }  
	  
	    @Override  
	    public void startElement(String uri, String localName, String name,  
	            Attributes attributes) throws SAXException {  
	        // TODO 当遇到文档的开头的时候,调用这个方法  
	        if(name.equals(nodeName)){  
	            map = new HashMap<String, String>();  
	        }  
	        if(attributes != null && map != null){  
	            for(int i = 0; i < attributes.getLength();i++){  
	                map.put(attributes.getQName(i), attributes.getValue(i));  
	            }  
	        }  
	        currentTag = name;  
	    }  
	      
	    @Override  
	    public void characters(char[] ch, int start, int length)  
	            throws SAXException {  
	        // TODO 这个方法用来处理在XML文件中读到的内容  
	        if(currentTag != null && map != null){  
	            currentValue = new String(ch, start, length);  
	            if(currentValue != null && !currentValue.trim().equals("") && !currentValue.trim().equals("\n")){  
	                map.put(currentTag, currentValue);  
	            }  
	        }  
	        currentTag=null;  
	        currentValue=null;  
	    }  
	  
	    @Override  
	    public void endElement(String uri, String localName, String name)  
	            throws SAXException {  
	        // TODO 在遇到结束标签的时候,调用这个方法  
	        if(name.equals(nodeName)){  
	            list.add(map);  
	            map = null;  
	        }  
	        super.endElement(uri, localName, name);  
	    }  
	      
	  
	} 

分享到:
评论

相关推荐

    SAX解析XML文件实例

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

    Java SAX解析Xml文档Demo

    本示例将详细解释如何在Java中使用SAX解析XML文档,并通过注释进行详细说明。 首先,我们需要引入SAX解析器的依赖库,通常这可以通过在项目构建配置中添加JAXB或Xerces实现来实现。 ```java // 引入必要的库,如...

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

    Java解析XML数据主要涉及到...总的来说,SAX解析器是Java处理XML文档的一种高效方式,特别适合处理大文件或资源有限的情况。通过自定义事件处理器,我们可以灵活地解析XML文档中的特定信息,而不必一次性加载整个文档。

    XML-java.rar_XML SAX_sax_sax xml_sax 解析 xml_xml using dom

    本压缩包文件“XML-java.rar”包含了关于使用Java解析XML的实例,特别强调了SAX解析器的使用,并且提到了使用JDOM和JOM4J这两个Java库来处理XML。 1. **DOM解析**:DOM是一种树型结构,它将整个XML文档加载到内存中...

    Sax解析XML文件解析

    2. **内存消耗小**:与DOM解析器(将整个XML结构转化为内存中的树形结构)相比,SAX解析器对内存的需求较少。 3. **实时性**:因为是事件驱动,解析过程可以与数据处理同时进行,提高了程序的响应速度。 **SAX解析...

    XML通过sax解析JSON格式

    标题中提到的"XML通过SAX解析为JSON格式"是指使用SAX解析器来读取XML文档,并将其转换成等效的JSON对象。SAX解析器以流式方式处理XML,当遇到文档的不同部分(如开始标签、结束标签、文本节点等)时,会触发相应的...

    SAX对xml文档进行解析

    下面是一个简单的SAX解析XML文档的Java代码示例: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXXmlDemo extends ...

    sax解析xml文件

    相较于DOM(Document Object Model)解析器,SAX解析器占用更少的内存和处理时间,因为它不会一次性加载整个XML文档到内存,而是采用事件驱动的方式逐个处理XML元素。在本项目中,"saxloadxml"应该是实现了一个SAX...

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

    本文将深入探讨如何使用SAX解析XML并获取元素的值或内容。 首先,SAX解析器以流式方式读取XML文档,当遇到文档的不同部分时,会触发相应的事件,如开始文档、开始元素、结束元素等。开发者可以注册事件处理器来响应...

    XML.rar_XML SAX_XML java_dom xml_java xml_java解析xml

    本篇文章将重点讲解XML在Java中的解析方式,特别是DOM和SAX解析。 1. DOM解析: DOM(Document Object Model)是W3C推荐的一种处理XML文档的标准模型。它将整个XML文档加载到内存中,构建一个树形结构,允许开发者...

    java sax 解析xml

    下面将详细介绍Java SAX解析XML的相关知识点。 1. **SAX解析原理**: - SAX解析器读取XML文件,遇到每个元素、属性、文本等,都会触发一个相应的事件。 - 应用程序通过实现SAX解析器的回调接口,定义处理这些事件...

    Sax解析xml文件

    SAX解析器的工作原理是基于事件驱动的,它在解析XML文档时会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素等。开发者通过实现SAX解析器的回调接口(如ContentHandler),在这些事件发生时执行相应的...

    sax解析xml本地读取xml

    SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式对XML文档进行解析,而不是一次性加载整个文档到内存中,因此在处理大型XML文件时,SAX解析器具有较高的性能和较低的内存消耗。 标题“sax解析...

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    XML的SAX解析

    以提供的`beans.xml`为例,假设这是一个描述Java Bean属性的XML文件,SAX解析可以用来动态创建和初始化Bean对象。在解析过程中,我们可以识别出bean的类型、属性名和属性值,然后创建对应的Bean实例并设置属性。 另...

    Java使用sax、dom、dom4j解析xml文档

    然而,SAX解析器并不提供修改XML文档的能力,只支持读取操作。以下是一个简单的SAX解析示例: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers....

    Servlet利用SAX解析XML文档

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

    javaSAX方式解析xml文档

    Java SAX方式解析XML文档是一种高效的处理大型XML文件的方法,它基于事件驱动模型,不将整个XML文档加载到内存中,而是逐个处理XML元素。这种方式非常适合处理大文件,因为它节省了内存,但需要编写更多的代码来处理...

    SAX解析超大XML文件 示例代码

    以下是一个简单的SAX解析超大XML文件的Java示例代码: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers....

Global site tag (gtag.js) - Google Analytics