• Android应用开发之XML文件解析之一


    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229

            本节我们学习XML解析,在Android程序中,Xml解析与Java中几乎相同,最常用的有SAX,DOM,Pull三种解析方式。Android中内置的是Pull解析方式,因此Pull解析也就成为Android推荐的解析方式。接下来我们分别针对这三种XML解析方式进行讲解。

    1SAX(Simple API for XML)

            SAX是基于事件驱动的模型。通俗的讲就是XML文件在加载的过程中,加载到不同节点会相应地触发不同方法来处理。它属于一次加载,可以处理任意大小的XML文件,它对内存的要求非常低,非常适合手机等移动终端设备。SAX采用的是读取文件的方式,把XML文件当作文本文件读,就只是读取,并不保存任何信息。SAX在解析XML过程中无法中断,只能读取XML文件而不能修改。

    1.1常用回调方法(DefaultHandler类)

    void startDocument() // 开始文档时触发
    void endDocument() // 结束文档时触发
    void startElement(String uri, String localName, String qName, Attributes atts) // 解析节点时触发
    void endElement(String uri, String localName, String qName) // 结束节点时触发
    void characters(char[ ] ch, int start, int length) // 处理文本节点

    1.2创建SAX解析器

    XMLReader reader = XMLReaderFactory.createXMLReader(); // 使用系统默认值来创建一个XMLReader
    XMLReader reader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); // 从给定的类名称来创建一个XMLReader
    SAXParserFactory spFactory = SAXParserFactory.newInstance(); // 使用javax.xml.parsers包中的SAXParserFactory类和SAXParser类创建
    SAXParser sParser = spFactory.newSAXParser();

    2Pull

            Pull也是基于事件驱动的模型。Android中内置了Pull解析包。从字面上就可以看出来,Pull,拉取的意思。需要什么资源就“拉取”什么资源。如果需要的只是XML文件中的一部分,就“拉取”一部分。从而节省资源,提高效率。当然在J2EE中也可以使用Pull解析。

    2.1常用回调事件

    XmlPullParser.START_DOCUMENT // 开始文档事件
    XmlPullParser.END_DOCUMENT // 结束文档事件
    XmlPullParser.START_TAG // 开始节点事件
    XmlPullParser.END_TAG // 结束节点事件

    2.2获得Pull解析器

    XmlPullParser parser = Xml.newPullParser();

    3DOM(Document Object Model)

            文档对象模型,它是基于对象的,又或者是基于树的。它属于两次加载,首先将整个文档载入内存,然后将文档解析形成一棵树。如果文档过大,对内存占用是很大的。但它可以在解析的过程中修改文件树,可以存储文件树的任意部分。
    解析思路:
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); // 创建一个DocumentBuilderFactory实例
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); // 创建DocumentBuilder
    Document document = documentBuilder.parse(in); // 加载XML文档(Document)
    Element root = document.getDocumentElement(); // 获取文档的根结点(Element)
    NodeList nodes = root.getElementsByTagName(ELEMENT_ANDROID); // 获取根结点中所有子节点的列表(NodeList)
    for (int i = 0; i < nodes.getLength(); i++) {...} // 使用迭代获取子节点列表中的需要读取的结点
  • 相关阅读:
    Linux进程理解与实践(四)wait函数处理僵尸进程
    Linux进程理解与实践(三)进程终止函数和exec函数族的使用
    system V信号量和Posix信号量
    Linux进程间通信方式--信号,管道,消息队列,信号量,共享内存
    linux 高并发socket通信模型
    信号集函数
    进程间通信使用信号
    使用消息队列
    改变域名,php
    php函数
  • 原文地址:https://www.cnblogs.com/innosight/p/3271256.html
Copyright © 2020-2023  润新知