XML文件解析
XML解析:XML技术是Android平台的应用基础,
Android提供了多种解析XML的方式:SAX解析、DOM解析、PULL解析
SAX解析
SAX ——Simple API forXML (XML简单的API)
——解析速度快、占用内存少
——提供一组简单的API用于解析XML文件
——SAX在解析XML文件前,先指定一个解析事件处理器(Handler),SAX会对XML文档进行简单的顺序扫描,当扫描到【文档(Document)的开始和结束、元素(Element)的开始和结束的】标记Tag时,会给之前指定的解析事件处理器发送消息,由处理器来处理相应的事件。 当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解析