XML解析---SAX
来源:互联网 发布:软件定制 编辑:程序博客网 时间:2024/05/16 19:55
SAX解析
1、编写SaxHelper 继承 DefaultHandler
1)创建目标类
2)创建ArrayList,用来存放解析结果;
3)复写startDocument() 当SAX解析器解析到XML文档开始时,会调用的方法
4)复写endDocument() 当SAX解析器解析到XML文档结束时,会调用的方法
5)复写characters() 当SAX解析器解析到某个元素开始时,会调用的方法 其中localName记录的是元素属性名
6)复写endElement()当SAX解析器解析到某个元素结束时,会调用的方法 其中localName记录的是元素属性名
2、编写sax()
1)创建ArrayList,用来存放解析结果;
2)把xml文件转化为InputSource格式;
3)通过SAXParserFactory.newInstance() 获取factory;
4)通过factory获得saxParser;
5)通过saxParser.getXMLReader() 获得xml阅读器;
6)设置 阅读器 handler xmlReader.setContentHandler;
7)设置 阅读器的InputSource
## BOOK类 ##
package com.example.xmltest;import java.io.IOException;import java.util.ArrayList;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.DOMImplementation;import org.w3c.dom.Document;import org.xml.sax.EntityResolver;import org.xml.sax.ErrorHandler;import org.xml.sax.InputSource;import org.xml.sax.SAXExceptionpublic class Book { private String id; private String name; private String prize; 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 getPrize() { return prize; } public void setPrize(String prize) { this.prize = prize; } public String toString() { return this.id + this.name + this.prize ; }}
待读取xml
<?xml version="1.0" encoding="utf-8"?> <books> <book auther="a"> <id>1001</id> <name>Thinking In Java</name> <price>80.00</price> </book> <book auther="b"> <id>1002</id> <name>Core Java</name> <price>90.00</price> </book> <book auther="c"> <id>1003</id> <name>Hello, Andriod</name> <price>100.00</price> </book> </books>
SAXHelper
package com.example.xmltest;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.ext.DefaultHandler2;import org.xml.sax.helpers.DefaultHandler;public class SaxHelper extends DefaultHandler{ private int currentstate = 0; final int id = 1; final int name = 2; final int price = 3; Book book; List<Book> books; public List getbooks() { return books; } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub String str = new String(ch); switch (currentstate) { case id: book.setId(str); currentstate = 0; break; case name: book.setName(str); currentstate = 0; break; case price: book.setPrize(str); currentstate = 0; break; default: break; } super.characters(ch, start, length); } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub if(localName.equals("book")) { books.add(book); } super.endElement(uri, localName, qName); } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub books = new ArrayList<Book>(); book = new Book(); super.startDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (localName.equals("books")) { currentstate = 0; return; } if (localName.equals("book")) { book = new Book(); return; } if (localName.equals("id")) { currentstate = id; return; } if (localName.equals("name")) { currentstate = name; return; } if (localName.equals("price")) { currentstate = price; return; } // TODO Auto-generated method stub super.startElement(uri, localName, qName, attributes); }}
sax()
private void sax(InputSource inputstream)throws Exception{ SAXParserFactory factory = SAXParserFactory.newInstance(); List<Book> books = new ArrayList<Book>(); try { SAXParser saxparser = factory.newSAXParser(); //获得阅读器 XMLReader xmlreader = saxparser.getXMLReader(); SaxHelper saxh = new SaxHelper(); xmlreader.setContentHandler(saxh); xmlreader.parse(inputstream); //返回数据 books = saxh.getbooks(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } for(Book book:books) { System.out.println(book.toString()); } }
0 0
- [XML] SAX解析XML
- 【XML】SAX解析XML
- XML解析(SAX解析)
- XML解析:SAX解析
- Study SAX《SAX解析XML》
- 使用SAX解析XML
- 解析xml之--SAX
- SAX解析XML
- SAX解析XML
- xml文件解析-SAX
- 解析xml之--SAX
- 解析xml之--SAX
- 使用SAX解析XML
- XML学习《SAX解析》
- SAX解析XML例子
- java sax 解析 xml
- 使用SAX解析XML
- sax解析xml实例
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android应用程序启动过程源代码分析
- c++的基本语言知识(二)
- Linux电源管理_Wakeup count功能--(三)
- [dp]poj2229 Sumsets
- XML解析---SAX
- 线程的调度-优先级
- iOS-个人使用的一些第三方库
- 基于linux2.6.30.4的s3c2440寄存器的虚拟地址和物理地址的关系ioremap()
- 万能板制作,简直是艺术品
- 黑马程序员 java相关的概念1
- WPF绑定各种数据源之元素控件属性
- 和小强一起学数据结构java版之希尔排序
- Windows Prefetch File Format