SAX(XML的简单API)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM ,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。
SAX的优点:
解析速度快占用内存少SAX的缺点:
无法知道当前解析标签(节点)的上层标签,及其嵌套结构,仅仅知道当前解析的标签的名字和属性,要知道其他信息需要程序猿自己编码只能读取XML,无法修改XML无法随机访问某个标签(节点)SAX解析适用场合 对于CPU资源宝贵的设备,如安卓等移动设备对于只需从XML读取信息而无需修改XML解析步骤可分为五步:
1,获得sax解析工厂 SAXParserFactory factory = SAXParserFactory.newInstance();
2,解析工厂生产sax解析器 SAXParser saxParser = factory.newSAXParser();
3,根据解析工厂创建读取器 XMLReader xmlReader = saxParser.getXMLReader();
4,根据读取器设置事件处理器 xmlReader.setContentHandler(new MyHandler());
setContentHandler方法中的参数是ContentHandler的类型的是一个接口,由于接口不能直接新的对象,使用匿名内部类的办法代码过于冗长,想到使用其实现的子类的DefaultHandler需要实现的方法太多,从事我们应该想到适配器的概念。于是自己创建一个MyHandler类并扩展DefaultHandler覆盖部分方法 .5,解析books.xml文件 xmlReader.parse(“xml / books.xml”);
public class MyHandler extends DefaultHandler { private List<Bookorder> bookOrderList; Bookorder bookOrder; String text; @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); System.out.println("books.xml文档开始解析..."); } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); System.out.println("books.xml文档解析结束..."); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub super.startElement(uri, localName, qName, attributes); System.out.print("<" + qName); //解析属性 for (int i = 0; i < attributes.getLength(); i++) { System.out.print(" " + attributes.getLocalName(i) + "=\""+ attributes.getValue(i) + "\""); } System.out.print(">"); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub super.endElement(uri, localName, qName); System.out.print("</" + qName + ">"); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub super.characters(ch, start, length); //打印标签中的内容,按格式输出 System.out.print(new String(ch, start, length)); } }
Bookorder1对象
package saxBean; public class Bookorder1 { private String id; private String name; private String author; private String price; public String getPrice() { return price; } public String getId() { return id; } public void setId(String id) { this.id = id; } public void setPrice(String price) { this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } @Override public String toString() { return "Bookorder1 [id=" + id + ", name=" + name + ", author=" + author + ", price=" + price + "]"; } }
