XML文件解析【安卓7】——SAX解析
XML文件解析
XML解析:XML技術是Android平臺的應用基礎,
Android提供了多種解析XML的方式:SAX解析、DOM解析、PULL解析
SAX解析
SAX ——Simple API forXML (XML簡單的API)
——解析速度快、占用內存少
——提供一組簡單的API用於解析XML文件
——SAX在解析XML文件前,先指定一個解析事件處理器(Handler),SAX會對XML文檔進行簡單的順序掃描,當掃描到
SAX解析方法
- 創建SAX解析器的工廠對象
SAXParserFactory.newInstance
- 創建SAXParser解析器對象
SAXParserFactory.newInstance
- XML文檔開始時觸發本方法
DefaultHandler.startDocument ()
- XML文檔結束時觸發本方法
DefaultHandler.endDocument ()
- 元素開始時觸發本方法
DefaultHandler.startElement (String uri, String localName, String qName, Attributes attributes)
- 元素開始時觸發本方法
DefaultHandler.endElement (String uri, String localName, String qName, Attributes attributes)
參數:
uri:命名空間
localName:不帶命名空間的標簽名
qName:帶命名空間的標簽名
attributes:所有屬性和屬性值
- 讀到元素內容時,觸發本方法
DefaultHandler. characters (char [] ch, int start, int length)
SAX解析代碼
自定義xml文件存放到res/raw文件中
1 public void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 SAXParserFactory spf=SAXParserFactory.newInstance();//SAX解析器的工廠對象 4 try { 5 SAXParser sp=spf.newSAXParser();//SAX解析器對象 6 //讀取資源文件 7 InputStream is=getResources().openRawResource(R.raw.book); 8 //創建SAX事件處理器對象 9 DefaultHandler dh=new DefaultHandler(){ 10 private String name; 11 public void startElement(String uri, String localName, 12 String qName, Attributes attributes) 13 throws SAXException { 14 name=localName; 15 } 16 //獲得內容 17 public void characters(char[] ch, int start, int length) 18 throws SAXException { 19 if("name".equals(name)){ //當標簽名是name時,就去獲得文本 20 Toast.makeText(Sax0.thi s,new String(ch,start,length), 1000).show(); 21 name=null; 22 } 23 } 24 }; 25 sp.parse(is, dh); 26 } catch (ParserConfigurationException e) { e.printStackTrace(); 27 } catch (SAXException e) { e.printStackTrace(); 28 } catch (IOException e) { e.printStackTrace(); } 29 }SAX解析
XML文件解析【安卓7】——SAX解析