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. 学习札记 ----wind7下如何安装SqlServer数据库

    1.控制面板 ---找到程序和功能选项 如下图所示: 2.打开程序和功能后进入如下图所示的界面,点击打开或关闭window功能. 3.启动window7自带的IIS功能.如下图所示: 4.如上动作准备 ...

  2. c# Linq操作XML,查找节点数据

    /*查找XML*/ var filePath = Server.MapPath("~/xml/sample.xml"); XDocument doc = XDocument.Loa ...

  3. 图片与字符串(base64编码)的转化

    package com.demo; import java.util.*; import java.io.*; import sun.misc.BASE64Decoder; import sun.mi ...

  4. iOS 简单socket连接

    - (void)CreateSocket{ NSString *host = [self.realStreamDict objectForKey:@"StreamSeverIP"] ...

  5. Ubuntu 中登录相关的日志

    登录相关的日志涉及到系统的安全,所以是系统管理中非常重要的一部分内容.本文试图对登录相关的日志做一个整理. /var/log/auth.log 这是一个文本文件,记录了所有和用户认证相关的日志.无论是 ...

  6. win10 uwp 读写XML

    UWP 对 读写 XML做了一些修改,但和之前 WPF 的方法没有大的区别. 我们先来说下什么是 XML , XML 其实是 树结构,可以表达复杂的结构,所以在定制要求高的.或其他方面如json 做不 ...

  7. 走进 UITest for Xamarin.Forms

    上一篇  走进 Prism for Xamarin.Forms 讲了简单的创建一个项目,然后添加了几个页面来回切换,这篇想先搞下 UITest 官方详细地址:https://developer.xam ...

  8. 【NOIP2016提高组】 Day2 T1 组合数问题

    题目传送门:https://www.luogu.org/problemnew/show/P2822                 ↓题目大意↓ 数据的极限范围:n,m≤2000,k≤21,数据组数≤ ...

  9. Azure环境中Nginx高可用性和部署架构设计

    前几篇文章介绍了Nginx的应用.动态路由.配置.在实际生产环境部署时,我们需要同时考虑Nginx的高可用性和部署架构. Nginx自身不支持集群以保证自身的高可用性,商业版本的Nginx+推荐: T ...

  10. Bower+grunt-wiredep自动注入包到html

    以安装jquery为例 1.假设已经通过npm安装好了bower和grunt-wiredep,以及grunt-contrib-watch(用来观察文件变动) 在gruntfile.js文件中增加任务 ...