• 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   }
  • 相关阅读:
    快排 [模板]
    翻硬币
    Euphoria与量子波动速读
    高精度例题
    Div3 595 E
    Div 595 C1 C2
    常用 STL 整理
    CF 595 Div3 B2
    【思维】复杂度均摊+并查集——icpc cerc 2019 Saba1000kg
    离散化+圆直线交点+转化——icpc cerc 2019 D
  • 原文地址:https://www.cnblogs.com/dahaoheshan/p/6999436.html
Copyright © 2020-2023  润新知