import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
/**
* 1.新建一个SAX解析工厂实例
* 2.new一个解析器
* 3.new一个解析处理器
* 4.解析文件
* 5.获取信息
* @author Administrator
*
*/
public class SAXParserDemo { public static void main(String[] args) {
SAXParserFactory factory = SAXParserFactory.newInstance();// 工厂模式,单例模式
try {
/* 获得一个sax解析器 */
SAXParser parser = factory.newSAXParser();
/* 解析器解析这个文件,new一个解析处理器 */
SAXParserHandler sax = new SAXParserHandler();
parser.parse("books.xml", sax);
System.out.println("几本书:" + sax.booklist.size()); for (Book book : sax.booklist) {
System.out.println(book.getId());
System.out.println(book.getName());
System.out.println(book.getPrice());
System.out.println(book.getAuthor()); } } catch (ParserConfigurationException e) { e.printStackTrace();
} catch (Exception e) { e.printStackTrace();
}
} }
 package SAXParser1;

 import java.util.ArrayList;

 import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; /**
* @author xuhua 解析处理器
* 1.重写方法
*/
public class SAXParserHandler extends DefaultHandler {
/* 全局变量 */
Book book;
String value;
ArrayList<Book> booklist = new ArrayList<Book>(); /**
* 解析开始
*/
@Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("parse start");
} /**
* 解析结束
*/
@Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("parse end");
} /**
* 开始解析标签
* qName:标签名字 Attributes:属性
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); if (qName.equals("book")) {
book = new Book();
String id = attributes.getValue("id");//获取id属性值
System.out.println(id); /* 获取属性名与属性值 */
int num = attributes.getLength(); // 属性个数
for (int i = 0; i < num; i++) {
System.out.println("属性名:" + attributes.getQName(i));
System.out.println("属性值:" + attributes.getValue(i));
/* 把id属性值set进book实体中 */
if (attributes.getQName(i).equals("id")) {
book.setId(attributes.getValue(i));
}
}
} System.out.println("属性名:" + qName);
} /**
* 结束标签解析
*/
@Override
public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName);
if (qName.equals("book")) {
booklist.add(book);
book = null;
System.out.println("==============结束遍历某一本书的内容=============");
}
/* id为book节点的属性,其他为节点值 */
// else if(qName.equals("id"))
// {
// book.setId(value);
// }
else if (qName.equals("name")) {
book.setName(value);
} else if (qName.equals("price")) {
book.setPrice(value);
} else if (qName.equals("author")) {
book.setAuthor(value);
}
System.out.println(qName + "元素结束"); } /**
* 获取节点值
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length);
/**/
value = new String(ch, start, length);
// if(value.trim()!=null)
if (!value.trim().equals("")) // 标签之间存在空格
System.out.println(value);
} }

解析处理器

 package SAXParser1;

 public class Book {
private String id;
private String name;
private String price;
private String author;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
} }

book实体javabean

 <?xml version="1.0" encoding="utf-8"?>
<bookstore>
<book id="1">
<name>java入门</name>
<price>80</price>
<author>张思</author>
</book>
<book id="2">
<name>java进阶</name>
<price>90</price>
<author>叶东</author>
</book> </bookstore>

xml文件

SAX解析文件的更多相关文章

  1. dom4j解析器 基于dom4j的xpath技术 简单工厂设计模式 分层结构设计思想 SAX解析器 DOM编程

    *1 dom4j解析器   1)CRUD的含义:CreateReadUpdateDelete增删查改   2)XML解析器有二类,分别是DOM和SAX(simple Api for xml).     ...

  2. JAVA使用SAX解析XML文件

    在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...

  3. SAX解析xml文件

    需要做一个银行名字的列表. 因为有很多,所以想到了用xml来保存,然后uongDAX解析. public class BankSelectActivity extends BaseActivity{ ...

  4. XML文件解析DOM解析和SAX解析

    解析一个XML文档有哪些内容解析有:dom和sax两种dom:把整个XML文档放入内存,适合XML随机访问,占用内存资源大sax:事件驱动型的XML解析方式,顺序读取,不用一次装载整个文件,遇到标签会 ...

  5. android sax解析xml 文件 动态加载标题

    要解决一个问题 : 问题描述为 把标题动态的加载到 listView子布局中 我们首先通过 java程序写一个把标题写到xml文件的程序.这个程序会在以后讲解. 现在截图 已经写好的xm文件格式如下 ...

  6. cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)

    今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会 ...

  7. 使用SAX解析XML文件

    SAX这是Simple API for XML缩写,它不是由引起W3C拟议标准正式.尽管如此,使用SAX很少几个,点儿全部的XML解析器都会支持它. 与DOM比較而言,SAX是一种轻量型的方法. 我们 ...

  8. 用SAX解析xml文件,java

    (此文为(https://www.imooc.com/video/4482)之随笔) 1.用SAX解析xml文件大致分为三步 写了一个XML文件作为例子 (1)main方法代码如下: import j ...

  9. 【文件处理】xml 文件 SAX解析

    SAX的全称是Simple APIs for XML,也即XML简单应用程序接口. 与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式. 当使用SAX分析器对XML文档 ...

随机推荐

  1. EasyUI Dialog 窗体 布局记要

    通常在窗体里放置的都是表单,或者使用分栏(Tab)来陈列信息也是非常的好用.在这里特别记录一下在窗体里同时放置表单和表格的设计思路. 仅放置一个表单 通常 Dialog 里只放一个表单,而且表单的行数 ...

  2. (@WhiteTaken)设计模式学习——观察者模式

    忙里抽闲,继续学习设计模式,作为自己的读书笔记,这次介绍Java下实现的观察者模式. 观察模式需要了解的三个概念: 被观察者:被观察的对象,发生变化会通知观察者集合(存放观察者的容器) 观察者:有up ...

  3. win10 uwp 绑定多数据

    经常我们需要绑定的数据有多个,当添加到集合控件的对象类型结构比较复杂,我们希望自己来定义排版布局,这时可以使用ItemTemplate用资源的定义 现在有数据 public class caddres ...

  4. WPF 绑定密码

    我们发现我们无法绑定密码框的密码,PasswordBox 的 Password 不能绑定. 我们想做 MVVM ,我们需要绑定密码,不能使用前台 xaml.cs 监听 密码改变得到密码的值,传到 Vi ...

  5. php的序列化和反序列化有什么好处?

    序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. PHP 中的序列化和反序列 ...

  6. 三、Spring的面向切面

    Spring的面向切面 在应用开发中,有很多类似日志.安全和事务管理的功能.这些功能都有一个共同点,那就是很多个对象都需要这些功能.复用这些通用的功能的最简单的方法就是继承或者委托.但是当应用规模达到 ...

  7. NandFlash ECC 校验

    ECC的全称是Error Checking and Correction,是一种用于Nand的差错检测和修正算法.如果操作时序和电路稳定性不存在问题的话,NAND Flash出错的时候一般不会造成整个 ...

  8. C++const使用(06)

    可以在类中使用const关键字定义数据成员和成员函数或修饰一个对象.一个const对象只能访问const成员函数,否则将产生编译错误. 常量成员 常量成员包括常量数据成员.静态常数据成员和常引用.静态 ...

  9. phalcon——验证

    一个完整的使用实例:(验证模型数据) use Phalcon\Mvc\Model; use Phalcon\Mvc\Model\Validator\Email as EmailValidator; u ...

  10. 火狐浏览器打开html文件,中文乱码

    当html文件为: 解决方法: 将   <meta http-equiv="Content-Type" content="text/html; charset=UT ...