Java眼中的XML--文件读取--2 应用SAX方式解析XML
1、获取一个SAXParserFactory的实例。2、通过factory获取SAXParser实例。








package com.goodboy.saxtest; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; import com.goodboy.SAXParserHandler.SAXParserHandlerTest; public class SAXTest { public static void main(String[] args) {
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser sax = factory.newSAXParser();
//创建一个SAXParserHandler对象
SAXParserHandlerTest handler = new SAXParserHandlerTest();
//作为参数使用
sax.parse("books.xml", handler);
} 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();
}
} }
SAXTest(main)
package com.goodboy.SAXParserHandler; import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; public class SAXParserHandlerTest extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("解析开始");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
System.out.println("=====开始访问节点"+qName+"=====");
//这里的qName是标签名
if (qName.equals("book") ) {
System.out.println("属性的个数:"+attributes.getLength());
for (int i = 0; i < attributes.getLength(); i++) {
String name = attributes.getQName(i);
System.out.println("属性名:"+name);
String value = attributes.getValue(i);
System.out.println("属性值:"+value);
}
}else if(!qName.equals("book") && !qName.equals("bookstore") ) {
System.out.print("属性名:"+qName);
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
System.out.println("=====结束访问节点"+qName+"=====");
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("解析结束");
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
String name = new String(ch, start, length);
if (!name.trim().equals("")) {
System.out.println(" 节点中的内容:"+name);
}
}
}
DefaultHandler对象
最后 使用SAX解析将XML的内容和结构存入JAVA对象
1、建立一个book类:
package com.goodboy.SAXParserHandler; import java.util.ArrayList; import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; import com.goodboy.entity.Book; public class SAXParserHandlerTest extends DefaultHandler {
Book book = null;
String value = null;
ArrayList<Book> booklist = new ArrayList<Book>();
public ArrayList<Book> getBooklist() {
return booklist;
}
@Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("解析开始");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
System.out.println("=====开始访问节点"+qName+"=====");
//这里的qName是标签名,也是集合的元素名
if (qName.equals("book") ) {
book = new Book();
System.out.println("属性的个数:"+attributes.getLength());
for (int i = 0; i < attributes.getLength(); i++) {
if(attributes.getQName(i).equals("id")){
book.setId(attributes.getValue(i));
System.out.println("book.getId:"+book.getId());
}
}
}else if(!qName.equals("book") && !qName.equals("bookstore") ) {
System.out.print("属性名:"+qName);
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
String name = new String(ch, start, length);
if (!name.trim().equals("")) {
System.out.println(" 节点中的内容:"+name);
value = name;
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
System.out.println("=====结束访问节点"+qName+"=====");
if (qName.equals("name")) {
book.setName(value);
}
if (qName.equals("author")) {
book.setAuthor(value);
}
if (qName.equals("year")) {
book.setYear(value);
}
if (qName.equals("prive")) {
book.setPrice(value);
}
if (qName.equals("language")) {
book.setLanguage(value);
}
if (qName.equals("book")) {
booklist.add(book);
book = null;
}
value = null;
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("book集合的长度"+booklist.size());
System.out.println(booklist.get(0).getName());
System.out.println("解析结束");
}
}
Java眼中的XML--文件读取--2 应用SAX方式解析XML的更多相关文章
- Android -- 创建XML文件对象及其序列化, pull解析XML文件
1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- (四)SAX方式解析XML数据
SAX方式解析XML数据 文章来源:http://www.cnblogs.com/smyhvae/p/4044170.html 一.XML和Json数据的引入: 通常情况下,每个需要访问网络的应用程 ...
- Java&Xml教程(五)使用SAX方式解析XML文件
Java SAX解析机制为我们提供了一系列的API来处理XML文件,SAX解析和DOM解析方式不太一样,它并不是將XML文件内容一次性全部加载,而是连续的部分加载. javax.xml.parsers ...
- Android程序解析XML文件的方法及使用PULL解析XML案例
一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...
- 网络相关系列之四:数据解析之SAX方式解析XML数据
一.XML和Json数据的引入: 通常情况下.每一个须要訪问网络的应用程序都会有一个自己的server.我们能够向server提交数据,也能够从server获取数据.只是这个时候就有一个问题,这些数据 ...
- 用JAXP的SAX方式解析XML文件
简单用JAXP的SAX方式(事件驱动)解析XML文件: 文件(1.XML) <?xml version="1.0" encoding="UTF-8" st ...
- SAX方式解析XML文件实例
books.XML文件: 书籍book.java实体类: public class Book { private String id; private String name; private Str ...
- SAX方式解析XML
sax解析分为以下几步: 1 获取一个saxparserfactory 2 获取一个解析器 3 创建handler对象,这个myHandler是继承了DefaultHandler的一个类,这个实现类里 ...
随机推荐
- 使用的 SQL Server 版本不支持数据类型“datetime2”的错误解决方法
THE VERSION OF SQL IN USE DOES NOT SUPPORT DATATYPE ‘DATETIME2′ 主要错误原因,在使用ado.net entity的时候,entity使用 ...
- Android manifest之系统自带的permission
Android manifest之系统自带的permission 本文描述Android系统自带的permission.点击查看:“关于permission的原始定义和说明”.点击查看:“Androi ...
- 15款提高工作效率的 Web 项目管理工具
在今天的快节奏的商业世界里,能够通过计划.组织.和管理资源池以及评估开发资源的模式来管理一个项目,是一个很艰巨的任务. 有很多现成的项目管理软件来帮助减轻项目管理的负担,并且他们几乎覆盖了所有类型的业 ...
- Mysql学习笔记(八)索引
PS:把昨天的学习内容补上...发一下昨天学的东西....五月三日...继续学习数据库... 学习内容: 索引.... 索引的优点: 1.通过创建唯一索引,可以保证数据库每行数据的唯一性... 2.使 ...
- hibernate集成
hibernate是一个优秀的持久化框架负责简化将对象保存到数据库中,或从数据库中读取数据并封装到对象的工作.hibernate通过简单配置和编码即可替代jdbc繁琐的程序代码. 下面是集成hiber ...
- ThroughRain第二次冲刺(每天更新
第二次冲刺时间: 11月28-12月5号 第一次冲刺目标及分配: 1. 查询点餐界面 认领:梁仕标 2. 链接数据库 认领:冯梓凡 3. 建立数据库的表 ...
- 0525Sprint回顾
1.回顾组织 主题:“我们下次怎么样才能更加认真对待?” 时间:设定为1至2个小时. 参与者:整个团队. 场所:能够在不受干扰的情况下讨论. 秘书:指定某人当秘书,筹备.记录.整理. 2.回顾流程 ...
- Struts2的基本流程的详细介绍
Struts2基本流程 概述: Struts2框架由三部分构成:核心控制器.业务控制器和用户实现的业务逻辑组件.在这三部分中,struts2框架提供了核心控制器StrutsPrepareAndExec ...
- ompparticles.cpp:(.text+0x322): undefined reference to `omp_set_num_threads'
参考 http://www.code-by.org/viewtopic.php?f=54&t=163
- dp - Codeforces Round #313 (Div. 1) C. Gerald and Giant Chess
Gerald and Giant Chess Problem's Link: http://codeforces.com/contest/559/problem/C Mean: 一个n*m的网格,让你 ...