XML案例(使用JAXP进行SAX解析)
1.Book.java
package cn.itcast.sax;
public class Book {
	private String name;
	private String author;
	private String price;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
}
2.Demo1.java
package cn.itcast.sax;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
public class Demo1 {
	/*
	 * sax 解析xml文档
	 */
	@Test
	public void test1() throws Exception, SAXException {
// 1.创建解析工厂
		SAXParserFactory factory = SAXParserFactory.newInstance();
// 2.得到解析器
		SAXParser sp = factory.newSAXParser();
// 3.得到读取器
		XMLReader reader = sp.getXMLReader();
// 4.设置内容处理器
		reader.setContentHandler(new ListHandler());
// 5.读取xml文档内容
		reader.parse("src/book.xml");
	}
}
// 得到xml文档所有内容
class ListHandler implements ContentHandler {
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes atts) throws SAXException {
		System.out.println("<" + qName + ">");
for (int i = 0; atts != null & i < atts.getLength(); i++) {
			String attName = atts.getQName(i);
			String attValue = atts.getValue(i);
			System.out.println(attName + "=" + attValue);
		}
	}
@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		System.out.println("</" + qName + ">");
	}
@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
System.out.println(new String(ch, start, length));
	}
@Override
	public void ignorableWhitespace(char[] ch, int start, int length)
			throws SAXException {
		// TODO Auto-generated method stub
}
@Override
	public void processingInstruction(String target, String data)
			throws SAXException {
		// TODO Auto-generated method stub
}
@Override
	public void skippedEntity(String name) throws SAXException {
		// TODO Auto-generated method stub
}
@Override
	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
}
@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
}
@Override
	public void startPrefixMapping(String prefix, String uri)
			throws SAXException {
		// TODO Auto-generated method stub
}
@Override
	public void endPrefixMapping(String prefix) throws SAXException {
		// TODO Auto-generated method stub
}
@Override
	public void setDocumentLocator(Locator locator) {
		// TODO Auto-generated method stub
}
}
3.Demo2.java
package cn.itcast.sax;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class Demo2 {
	/*
	 * sax 解析xml文档
	 */
	@Test
	public void test1() throws Exception, SAXException {
// 1.创建解析工厂
		SAXParserFactory factory = SAXParserFactory.newInstance();
// 2.得到解析器
		SAXParser sp = factory.newSAXParser();
// 3.得到读取器
		XMLReader reader = sp.getXMLReader();
// 4.设置内容处理器
		reader.setContentHandler(new TagValueHandler());
// 5.读取xml文档内容
		reader.parse("src/book.xml");
	}
// 获取指定标签的值
	class TagValueHandler extends DefaultHandler {
private String currentTag;// 记住当前解析到的是什么标签
		private int needNumber=2;//记住想获取第几个作者标签的值
		private int currentNumber;//当前解析到的是第几个
@Override
		public void startElement(String uri, String localName, String qName,
				Attributes attributes) throws SAXException {
			currentTag = qName;
			if ("作者".equals(currentTag))
				currentNumber++;
		}
@Override
		public void endElement(String uri, String localName, String qName)
				throws SAXException {
			currentTag = null;
		}
@Override
		public void characters(char[] ch, int start, int length)
				throws SAXException {
			if ("作者".equals(currentTag)&¤tNumber==needNumber)
				System.out.println(new String(ch, start, length));
		}
}
}
4.Demo3.java
package cn.itcast.sax;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import cn.itcast.sax.Demo2.TagValueHandler;
public class Demo3 {
	/*
	 * sax 解析xml文档
	 */
	@Test
	public void test1() throws Exception, SAXException {
// 1.创建解析工厂
		SAXParserFactory factory = SAXParserFactory.newInstance();
// 2.得到解析器
		SAXParser sp = factory.newSAXParser();
// 3.得到读取器
		XMLReader reader = sp.getXMLReader();
// 4.设置内容处理器
		BeanListHandler handler=new BeanListHandler();
		reader.setContentHandler(handler);
// 5.读取xml文档内容
		reader.parse("src/book.xml");
List<Book> list=handler.getBooks();
		for(Book book :list){
		System.out.println("书名:"+book.getName());
		System.out.println("作者:"+book.getAuthor());
		System.out.println("价格:"+book.getPrice());
		System.out.println();
		}
	}
// 把xml文档中的每一本书封装到一个book对象,并把多个book对象放在一个list集合中返回
	class BeanListHandler extends DefaultHandler {
private List list = new ArrayList();
		private String currentTag;
		private Book book;
@Override
		public void startElement(String uri, String localName, String qName,
				Attributes attributes) throws SAXException {
			currentTag = qName;
			if ("书".equals(currentTag))
				book = new Book();
		}
@Override
		public void endElement(String uri, String localName, String qName)
				throws SAXException {
			if ("书".equals(qName)) {
				list.add(book);
				book = null;
			}
			currentTag = null;
}
@Override
		public void characters(char[] ch, int start, int length)
				throws SAXException {
			if ("书名".equals(currentTag)) {
				String value = new String(ch, start, length);
				book.setName(value);
			}
			if ("作者".equals(currentTag)) {
				String value = new String(ch, start, length);
				book.setAuthor(value);
			}
			if ("售价".equals(currentTag)) {
				String value = new String(ch, start, length);
				book.setPrice(value);
			}
		}
public List getBooks() {
			return list;
		}
}
}
XML案例(使用JAXP进行SAX解析)的更多相关文章
- XML - 十分钟了解XML结构以及DOM和SAX解析方式
		引言 NOKIA 有句著名的广告语:"科技以人为本".不论什么技术都是为了满足人的生产生活须要而产生的.详细到小小的一个手机.里面蕴含的技术也是浩如烟海.是几千年来人类科技的结晶, ... 
- 使用JAXP进行sax解析
		package cn.liuning.sax; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactor ... 
- JAXP的SAX解析
		* 使用Sax解析XML文档 * * 使用Sax解析文档和DOM解析不一样. * 概述: * 是一种XML解析的替代方法.相比于DOM,SAX是一种速度更快,更有效的方法.它逐行扫描文档,一 ... 
- schema文件及XML文件的DOM和Sax解析
		schema文件 <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="htt ... 
- JAXP进行DOM和SAX解析
		1.常用XML的解析方式:DOM和SAX 1)DOM思想:将整个XML加载内存中,形成文档对象,所以对XML操作都对内存中文档对象进行. 2)SAX思想:一边解析,一边处理,一边释放内存资源---不允 ... 
- JavaEE实战——XML文档DOM、SAX、STAX解析方式详解
		原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ... 
- 17.JAVA-Dom、Sax解析XML详解
		在JAVA中,解析有三种方式: Dom解析(支持改删,耗内存). Sax解析(不支持改删,不耗内存). Pull解析(在Android中推荐使用的一种解析XML的方式,在下章学习). 1.支持Dom与 ... 
- Android使用SAX解析xml
		一.理论准备 SAX采用事件驱动机制来解析XML文档,每当SAX解析器发现文档开始.元素开始.文本.元素结束.文档结束等事件时,就会向外发送一次事件,而开发者则可以通过编写事件监听器处理这些事 ... 
- DOM&SAX解析XML
		在上一篇随笔中分析了xml以及它的两种验证方式.我们有了xml,但是里面的内容要怎么才能得到呢?如果得不到的话,那么还是没用的,解析xml的方式主要有DOM跟SAX,其中DOM是W3C官方的解析方式, ... 
随机推荐
- Vue项目在IE浏览器报错polyfill-eventsource added missing EventSource to window
			已经安装了babel-polyfill,依然报错. 
- CAD处理键盘被按下事件(com接口VB语言)
			主要用到函数说明: MxDrawXCustomEvent::KeyDown 键盘被按下,详细说明如下: 参数 说明 LONG lVk 是按钮码,如F8,的值为#define VK_F8 0x77 返回 ... 
- Mapreduce代码疑点(1)
			一.Hadoop MultipleInputs.addInputPath 读取多个路径 https://blog.csdn.net/t1dmzks/article/details/76473905 M ... 
- 【剑指Offer】65、矩阵中的路径
			题目描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经 ... 
- [Luogu] P4198 楼房重建
			题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些事件发生在一个 ... 
- 关于预测io调用的思考
			什么是预测io 预测io是linux2.6版本内核调用默认的调用程序,对应用程序进行跟踪,统计应用程序使用io情况,在读操作返回之前先停顿6ms时间(linux默认时间),如果这期间有读操作过来,可以 ... 
- Excel 绘制正态概率图-正态性检验
- go 语言优势
			一:为什么用Go来做抽奖系统 1.Go vs PHP/JAVA ①:高并发,Go协程优于PHP多进程,JAVA多线程模式 ②:高并发,编译后的二进制优于PHP解释型,JAVA虚拟机 3:高效网络模型 ... 
- hadoop datanode usages方差算法
			stdDev 标准差(方差) 阐述及应用 简单来说,标准差是一组数值自平均值分散开来的程度的一种测量观念.一个较大的标准差,代表大部分的数值和其平均值之间差异较大:一个较小的标准差,代表这些数值较接近 ... 
- JVM内存监控(五)
			频繁fullgc排查 jvm配置 -Xms200m -Xmx200m -Xmn50m -XX:PermSize=30m -XX:+HeapDumpBeforeFullGC -XX:+HeapDumpA ... 
