通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory 通过SAXParserFactory实例的newSAXParser()方法返回SAXParser实例parser 创建一个类继承DefaultHandle,重写方法进行业务处理并创建这个类的实例handle
重写DefaultHandle类的方法startElement方法用来遍历xml文件的开始标签;
endElement方法用来遍历xml文件的结束标签;
startDocument方法用来标识解析开始;
endDocument方法用来标识解析结束。
characters方法用来获取text
其中:参数qName 遍历到的元素的名称
且同样会出现空白和换行的问题
下面直接上代码<?xml version="1.0" encoding="UTF-8"?><bookstore> <book id="1"> <name>JAVA编程思想</name> <anthor>****</anthor> <year>2000</year> </book> <book id="2"> <name>疯狂JAVA系列</name> <anthor>李刚</anthor> <PRice>89</price> </book></bookstore>books.xmlSAX.java
package pers.zww.xml.handler;import javax.xml.stream.events.StartElement;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SAXParserHandler extends DefaultHandler{ int bookIndex=0; /* * 解析XML元素 */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); //开始解析book元素的属性 if (qName.equals("book")) { bookIndex++; System.out.println("开始遍历第"+bookIndex+"本书"); // //已知book元素下的属性名称,根据属性名称获取属性值// String value=attributes.getValue("id");// System.out.println("book的属性值:"+value); //未知book元素下的属性名称及个数 int num=attributes.getLength(); for (int i = 0; i < num; i++) { System.out.print("book元素的第"+(i+1)+"个属性名:"+attributes.getQName(i)); System.out.println(" && 属性值:"+attributes.getValue(i)); } }else if(!qName.equals("book")&&!qName.equals("bookstore")){ System.out.print("节点名:"+qName); }else { } } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub super.characters(ch, start, length); String val=new String(ch, start, length); if (!val.trim().equals("")) { System.out.println(" && 节点值:"+val); } } /* * 用来遍历xml文件的结束标签 */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); //是否针对一本书已经遍历结束 if (qName.equals("book")) { System.out.println("======================="); } } /* * 用来标志解析开始 */ @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); //第一行开始 System.out.println("SAX解析开始"); } /* * 用来标志解析结束 */ @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); //最后一行结束 System.out.println("SAX解析结束"); }}SAXParserHandler.javaSAX与DOM对比
DOM解析原理:先把XML文件整个加载到内存中,在逐个解析;
SAX解析原理:通过自己创建的Handler类,去逐个分析遇到的每一个节点;(节点分析是从最外层向里层逐个开始).
参考资料慕课网JessicaJiang老师视频教程 链接:http://www.imooc.com/video/3789
新闻热点
疑难解答