首页 > IT职业 > IT职场 > Java 解析xml 之 SAX解析
SAX是一种快速读写XML数据的方式。 局限 1.SAX分析器在解析xml文档时,触发了一系列事件,因为事件本身是有时序性的。因此SAX一旦经过了某个元素,没有办法返回再去访问。
2.SAX分析器只事检查xml文档中的字节流,语法,然后触发相应事件。而处理函数本身则要由程序实现,相比DOM,SAX缺乏灵活性。
优势SAX分析器实现简单,对内存要求比较低,因此实现小路比较高;对于大型的xml文档来说,通常会用SAX而不用DOM;对于那些只需要访问xml文档中的数据而不对文档进行更改的应用程序来说,SAX分析器更为合适。
SAX实例解析Juny Of City
Juny 2011 15.99 Harry Potter
J K. Rowling 2005 29.99 解析过程 package sax;
import java.io.File;
import java.util.Stack;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxTest2 {
public static void main(String[] args) throws Exception {
// step 1: 获得SAX解析器工厂实例
SAXParserFactory factory = SAXParserFactory.newInstance();
// step 2: 获得SAX解析器的实例
SAXParser parser = factory.newSAXParser();
// step 3: 开始进行解析
// 传入待解析的文档的处理器
parser.parse(new File("books.xml"),new MySAXHandler());
}
}
class MySAXHandler extends DefaultHandler {
// 使用栈这个数据结构来保存
private Stack stack = new Stack();
// 数据
private String title;
private String author;
private String year;
private double price;
@Override
public void startDocument() throws SAXException {
System.out.println("start document-> parse begin");
}
@Override
public void endDocument() throws SAXException {
System.out.println("end document-> parse finished");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// 将标签名压入栈
stack.push(qName);
// 处理属性
for (int i = 0; i ## 控制台输出 ## start document-> parse begin
属性:category:man
属性:lang:en
Book info: -------
title: Juny Of City
author: Juny
year: 2011
price: 15.99
属性:category:children
属性:lang:en
Book info: -------
title: Harry Potter
author: J K. Rowling
year: 2005
price: 29.99
end document-> parse finished
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/835/viewspace-2799552/ ,如需转载,请注明出处,否则将追究法律责任。