通過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.xml
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
新聞熱點
疑難解答