【安卓7】XML文件解析——SAX解析

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解析
原文地址:https://www.cnblogs.com/leelee/p/6994650.html