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)&&currentNumber==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解析)的更多相关文章

  1. XML - 十分钟了解XML结构以及DOM和SAX解析方式

    引言 NOKIA 有句著名的广告语:"科技以人为本".不论什么技术都是为了满足人的生产生活须要而产生的.详细到小小的一个手机.里面蕴含的技术也是浩如烟海.是几千年来人类科技的结晶, ...

  2. 使用JAXP进行sax解析

    package cn.liuning.sax; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactor ...

  3. JAXP的SAX解析

    * 使用Sax解析XML文档  *   * 使用Sax解析文档和DOM解析不一样.  * 概述:  * 是一种XML解析的替代方法.相比于DOM,SAX是一种速度更快,更有效的方法.它逐行扫描文档,一 ...

  4. schema文件及XML文件的DOM和Sax解析

    schema文件 <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="htt ...

  5. JAXP进行DOM和SAX解析

    1.常用XML的解析方式:DOM和SAX 1)DOM思想:将整个XML加载内存中,形成文档对象,所以对XML操作都对内存中文档对象进行. 2)SAX思想:一边解析,一边处理,一边释放内存资源---不允 ...

  6. JavaEE实战——XML文档DOM、SAX、STAX解析方式详解

    原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...

  7. 17.JAVA-Dom、Sax解析XML详解

    在JAVA中,解析有三种方式: Dom解析(支持改删,耗内存). Sax解析(不支持改删,不耗内存). Pull解析(在Android中推荐使用的一种解析XML的方式,在下章学习). 1.支持Dom与 ...

  8. Android使用SAX解析xml

    一.理论准备     SAX采用事件驱动机制来解析XML文档,每当SAX解析器发现文档开始.元素开始.文本.元素结束.文档结束等事件时,就会向外发送一次事件,而开发者则可以通过编写事件监听器处理这些事 ...

  9. DOM&SAX解析XML

    在上一篇随笔中分析了xml以及它的两种验证方式.我们有了xml,但是里面的内容要怎么才能得到呢?如果得不到的话,那么还是没用的,解析xml的方式主要有DOM跟SAX,其中DOM是W3C官方的解析方式, ...

随机推荐

  1. [Windows Server 2012] Filezilla安全加固方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:FileZ ...

  2. mysql_数据查询_连接查询

    连接查询 1.连接(join) 也称θ连接,从两个关系的笛卡尔积中选择属性间满足一定条件的元组. 等值连接:θ为“=”的连接运算称为等值连接.从关系R和S的广义笛卡尔积中选取A.B属性值相等的元组. ...

  3. linux下如何限制普通用户更改密码

    问题描述: 为了方便linux管理员对所有用户的进行管理,如何限制普通用户更改密码? 解决方法: 禁止普通用户更改密码: /usr/bin/passwd 若要允许普通用户更改密码: /usr/bin/ ...

  4. sublime text3 verilog代码编写高级操作篇

    2018.10.21 好久没写博客了,这段时间一直在学习一直在沉淀,然而发现学的越多会的更少,只能快马加鞭吧! 博主从大一暑假接触FPGA,到现在快一年半了,时间恍逝.刚开始入门也是用的quartus ...

  5. opcache的配置

    ; Enable Zend OPcache extension module zend_extension=opcache.so ; Determines if Zend OPCache is ena ...

  6. System----堡垒机

    你知道嘛是堡垒机吗? 你知道堡垒机是奏嘛的吗? 1,改server 端 socket server 接受到的请求 执行指令前,记录收到的指令,来源ip 用户名 缺点:每台机器都要更改源码,加入指令记录 ...

  7. zend studio【快捷键】

    =================================[快捷键 zend studio]========== 1.调出查找面板[ctrl+f] 2.全文检索[ctrl+h] 3.关闭当前文 ...

  8. BZOJ 4430 Guessing Camels赌骆驼

    [题意概述] 给出三个n的排列,求有多少个数对在三个排列中顺序相同 [题解] 考虑用补集转化的方法,答案为总对数-不满足的对数 一对数不满足条件,当且仅当这对数在两个排列中顺序相同,在另一个排列中的顺 ...

  9. js调用ro的webservice

    Enabling JavaScript Access on the Server Drop the JavaScriptHttpDispatcher component onto the server ...

  10. 【[Offer收割]编程练习赛13 A】风格不统一如何写程序

    [题目链接]:http://hihocoder.com/problemset/problem/1501 [题意] [题解] 模拟题 [Number Of WA] 1 [完整代码] #include & ...