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的一个类,这个实现类里 ...
随机推荐
- Android 简单计算器源码....
PS:今天算是闲着没事做了一个小型的计算器...顺便熟悉一下Android的布局,组件,以及时间监听的方法...就当是做了一个小小的练习吧... 顺便去对比了一下别人写的代码...有的使用到了 ...
- Android学习笔记(第二篇)View中的五大布局
PS:人不要低估自己的实力,但是也不能高估自己的能力.凡事谦为本... 学习内容: 1.用户界面View中的五大布局... i.首先介绍一下view的概念 view是什么呢?我们已经知道一个Act ...
- 探秘空值位图掩码(NULL bitmap mask)
这篇文章我想谈下空值位图掩码(NULL bitmap mask) ,并揭开它的神秘面纱.空值位图掩码是在存储引擎层为列是否存储NULL值进行编码.它是一个简单的位图掩码,如果值是1的话,表示这列有NU ...
- SystemTap了解
SystemTrap是监控和跟踪运行中的Linux内核操作的动态方法. http://www.ibm.com/developerworks/cn/linux/l-systemtap/ 使用System ...
- 一些有用的UtilityExtend小方法
public static bool StartBy(this string thisValue, params string[] startBy) { foreach (string item in ...
- 四、Handler(WSGIHandler)
1.1 类视图关系 Handler主要负责处理HTTP请求,并生成相应的相应,process_request,process_response是两个最主要的成员.下图是WSGIHandle ...
- Mysql中的各种timeout
在使用MySQL的过程中,你是否遇到了众多让人百思不得其解的Timeout?那么这些Timeout之后,到底是代码问题,还是不为人知的匠心独具?本期Out-man,讲述咱们MySQL DBA自己的Ti ...
- WinForm公共控件
公共控件:1.Button:按钮 用户点击时触发事件 行为属性 Enabled -是否启用 Visible -是否隐藏2.CheckBox .CheckListBox - 复选框 复选框组 3.Com ...
- 2016C#模拟谷歌Google登陆Gmail&Youtube小案例
之所以写这个,是因为本来想写一个Youtube刷评论的工具,把登录做出来了,后面就没继续做下去. 涉及到基本的HttpWatch的应用以及Fiddler的应用(Fd主要用来排查问题,通过对比 浏览器和 ...
- Dev TreeList设置焦点失败解决方法
问题描述 对TreeList初始化之后,设置treelist的焦点节点时,发现每次初始化控件的时不能正确的绑定焦点节点,第二次点开treelist的时候才会正常的设置目标节点为焦点节点. 截图 解决方 ...