`

xml解析--SAX解析

阅读更多
                    xml解析---SAX

工程结构图:
[img]

[/img]

这里的stu.xml文件是在src下的,而不是包里面的!

一、xml文件(随便写了一个)
<?xml version="1.0" encoding="utf-8"?>
<students>
	<student id="1">
		<name>tom</name>
		<age>20</age>
	</student>
	
	<student id="2">
		<name>kite</name>
		<age>21</age>
	</student>
	
	<student id="3">
		<name>rose</name>
		<age>22</age>
	</student>

</students>


二、Student类
package com.amaker.sax;

public class Student {
	
	private int id;
	private int age;
	private String name;
	/**
	 * 无参构造方法
	 */
	public Student() {
		super();
	}
	/**
	 * 带参构造方法
	 */
	public Student(int id, int age, String name) {
		super();
		this.id = id;
		this.age = age;
		this.name = name;
	}


	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Student [age=" + age + ", id=" + id + ", name=" + name + "]";
	}
	
	
}


三、MyDefaultHandler
package com.amaker.sax;

import java.util.ArrayList;
import java.util.List;

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

public class MyDefaultHandler extends DefaultHandler {
	
	private List<Student> studentList;
	private Student currentStudent;
	private String currentTag;
	@Override
	public void startDocument() throws SAXException {
		super.startDocument();
		studentList = new ArrayList<Student>();
	}
	@Override
	public void endDocument() throws SAXException {
		super.endDocument();
	}
	
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		super.startElement(uri, localName, qName, attributes);
		if(qName!=null&&qName.equals("student")){
			currentStudent = new Student();
			int id = Integer.parseInt(attributes.getValue("id"));
			currentStudent.setId(id);
		}
		currentTag = qName;
	}
	
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		super.endElement(uri, localName, qName);
		
		if(qName!=null&&qName.equals("student")){
			studentList.add(currentStudent);
			currentStudent = null;
		}
		currentTag = null;
	}
	
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		super.characters(ch, start, length);
		if(currentTag!=null){
			String data = new String(ch,start,length);
			if(currentTag.equals("name")){
				currentStudent.setName(data);
			}
			if(currentTag.equals("age")){
				currentStudent.setAge(Integer.parseInt(data));
			}
		}
	}
	
	public List<Student> getStudents(){
		return studentList;
	}
}



四、测试:Test
package com.amaker.sax;

import java.io.InputStream;
import java.util.List;

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

import org.xml.sax.SAXException;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		parse();
	}
	
	public static void parse(){
		InputStream in = new Test().getClass().getClassLoader().getResourceAsStream("stu.xml");
		SAXParserFactory factory = SAXParserFactory.newInstance();
		try {
			SAXParser parser= factory.newSAXParser();
			MyDefaultHandler handler = new MyDefaultHandler();
			parser.parse(in, handler);
			
			List<Student> list = handler.getStudents();
			for(Student s:list){
				System.out.println(s);
			}
			
			
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

}
  • 大小: 12.6 KB
0
0
分享到:
评论

相关推荐

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

    SAX解析的基本工作原理是通过事件处理器(如ContentHandler、EntityResolver等)来接收XML文档的解析事件,如开始文档、结束文档、开始元素、结束元素、字符数据等。当解析器遇到这些事件时,会调用相应的处理器方法...

    Android网络之数据解析----SAX方式解析XML数据

    1. 创建XML解析器:首先,我们需要创建一个XMLReader对象,它是SAX解析器的接口,可以通过XMLReaderFactory类来实例化。 2. 设置事件处理器:然后,我们为XMLReader对象设置一个ContentHandler,这是一个接口,包含...

    SAX解析XML文件实例

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

    Sax解析XML文件解析

    SAX(Simple API for XML)是XML解析的一种方法,它以事件驱动的方式处理XML文档,非常适合处理大体积的XML文件,因为它不需要一次性加载整个文件到内存,而是逐行读取,因此节省了资源。 **SAX解析XML的基本原理:...

    dom-sax解析XML文件-java

    SAX解析器采用事件驱动的方式,逐行读取XML文件,当遇到元素开始、结束、属性、文本等事件时,会触发相应的回调函数。这种方式内存占用低,适合处理大文件,但操作XML数据不如DOM直观,需要编写事件处理器来处理这些...

    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文档加载到内存中...

    XML四种解析方式------DOM SAX JDOM DOM4J

    JDOM是Java特有的XML解析库,它提供了更符合Java习惯的API来操作XML。与DOM类似,JDOM也创建一个文档对象模型,但它的设计更简洁,易于使用。相比DOM,JDOM的性能稍好,因为它减少了对象创建和内存使用,但对大型XML...

    sax解析xml文件

    SAX(Simple API for XML)是一种轻量级的XML解析技术,主要用于读取XML文档。相较于DOM(Document Object Model)解析器,SAX解析器占用更少的内存和处理时间,因为它不会一次性加载整个XML文档到内存,而是采用...

    XML解析之SAX解析DEMO

    本文将深入探讨XML解析中的SAX(Simple API for XML)解析方法,并结合一个具体的Android 4.0网络编程示例进行详细讲解。 SAX解析是一种基于事件驱动的解析方式,它不会一次性加载整个XML文档到内存,而是逐行读取...

    Java SAX解析Xml文档Demo

    Java SAX(Simple API for XML)解析器是一种基于事件驱动的XML解析方式,它不将整个XML文档加载到内存中,而是逐行读取,当遇到某个事件(如开始标签、结束标签等)时,会触发相应的事件处理器方法。这种方式节省了...

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

    SAX(Simple API for XML)是XML解析的一种方式,它采用事件驱动模型,适用于处理大型XML文档,因为它不需要将整个文档加载到内存中。本文将深入探讨如何使用SAX解析XML并获取元素的值或内容。 首先,SAX解析器以...

    sax解析xml本地读取xml

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

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

    而SAX(Simple API for XML)是一种事件驱动的XML解析器,它不像DOM(Document Object Model)那样将整个XML文档加载到内存中,而是逐行解析,因此对于大型XML文件,SAX解析更高效。 标题"读取RSS-SAX解析XML实例...

    Sax解析xml文件

    在Android和Java编程中,处理XML文件是常见的任务,而SAX(Simple API for XML)是一种轻量级、事件驱动的XML解析器,它以流式方式读取XML文档,只在需要时解析内容,因此非常适合处理大体积的XML文件。 SAX解析器...

    android----xml Sax解析示例

    总之,Android平台上的XML解析,特别是SAX解析,是一个重要的技能,可以帮助开发者高效地处理XML数据,节约宝贵的系统资源。通过理解和实践SAX解析,开发者能够更好地处理XML文档,为应用提供更加流畅的性能体验。

    vtd-xml vtd-xml vtd-xml

    5. **性能优势**:与DOM和SAX解析器相比,VTD-XML在处理大文件时具有显著的优势。DOM解析器会将整个XML树加载到内存中,占用大量资源;SAX是事件驱动的,适合流式处理,但不支持随机访问。而VTD-XML则兼顾了随机访问...

    解析XML--老师(解析,修改,删除,导出)

    ### XML解析 1. **基础概念**:XML文件由一系列元素组成,每个元素都有开始标签和结束标签,如`内容&lt;/element&gt;`。元素可以嵌套,属性可以附加在开始标签内提供额外信息。 2. **解析方式**: - **DOM解析**:将整个...

    android使用SAX解析xml

    本篇文章将详细介绍如何在Android环境中使用SAX解析器来处理从网络获取的XML文件。 1. **XML与SAX解析基础** - XML是一种结构化的文本数据表示方式,它定义了标签、属性等规则,使数据具有自解释性。 - SAX解析器...

    SAX--XML文件读写

    1. 创建XML解析器:使用`SAXParserFactory`工厂类创建`SAXParser`对象,通过`newSAXParser()`方法得到。 2. 设置内容处理器:创建一个实现了`ContentHandler`接口的类,并重写其中的方法,如`startElement()`、`...

    解析XML--自己

    在Python中,我们可以使用`xml.dom.minidom`库进行DOM解析,`xml.sax`库进行SAX解析。例如,使用DOM解析XML文档: ```python import xml.dom.minidom doc = xml.dom.minidom.parse("example.xml") root = doc....

Global site tag (gtag.js) - Google Analytics