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. c# 【MVC】WebApi设置返回Json

    public static HttpResponseMessage toJson(Object obj) { String str; if (obj is String || obj is Char) ...

  2. Django 模型中自定义Manager和模型方法

    1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager. 每个Django模型至少有一个m ...

  3. 【机器学习实战】第7章 集成方法 ensemble method

    第7章 集成方法 ensemble method 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重 ...

  4. 常用Linux操作命令

    查看物理CPU个数:cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 查看每个物理CPU中的核数:cat /proc ...

  5. LINUX 笔记-scp命令

    从本地服务器复制到远程服务器: (1) 复制文件: 命令格式: scp local_file remote_username@remote_ip:remote_folder (2) 复制目录: 命令格 ...

  6. 【ASP.NET MVC 学习笔记】- 08 URL Routing

    本文参考:http://www.cnblogs.com/willick/p/3343105.html 1.URL Routing告诉MVC如何正确的定位Controller和Action. 2.URL ...

  7. Integrates Git with Sublime 3 to pull or push to Github by using Sublime plugin Git

    1. Git must be installed, Sublime plugin "Git" only connects Sublime with Git. Download UR ...

  8. Java基础总结--IO总结2

    1.键盘录入--Java具有特定的对象封装这些输入输出设备在System类定义 in-InputStream类型和out-PrintStream类型成员变量阻塞是方法:read()无数据就阻塞wind ...

  9. java笔记04: String的理解与运用

    一,“==”与equals() 运行以下代码,如何解释其输出结果? public class StringPool { public static void main(String args[]) { ...

  10. Memcached理解

    一.Memcached简介: 1. Memcached是一个自由开源的,高性能的,分布式内存对象缓存系统. 2. Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符 ...