`
gaosililn
  • 浏览: 72902 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Android系列学习:xml 文本解析

阅读更多

Android 系列学习之XML文本数据解析

什么是XML?  XML是一种扩展标志语言。标准通用标记语言的子类,一种标记电子文件使其具有结构性的标记语言,一种可以有用户自定义标志的的源语言。

XMl的特点:

  1. 一种标记语言,很类似HTML
  2. 其宗旨是传输数据
  3. 标签没有被预定义,用户需要自己定义标签
  4. 具有较好的自我秒描述性
  5. 是W3C推荐标准
  6. 纯文本信息
  7. 空格会被保留

XML与HTML有啥区别呢?

  1. XML旨在传输信息。XML被设置为传输和储存数据,焦点在数据内容;
  2. HTML旨在显示信息。HTML被设计问显示信息,焦点在信息的展示外观;
  3. XML的标签都没有预定义,需要用户自定义标签,HTML则是所有表亲都是预定义的。

常使用来解析XML数据的两种方式:SAX解析,在Android中较为流行的一种解析器;还有就是Document解析,在Android中,用的还是相对比较少的。

下面实例来比较一下两种的区别。

Document 解析:



 

步聚

  1. 获取document的解析工厂;DocumentBuilderFactory
  2. 获取DocumentBuilderFactory
  3. 获取Document实例

实例代码:

      //获取Documen的解析工厂
      DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
      //获取解析的器的对象Document 
      // inputStream为读取本地XML文件获取到的inputStream或者是web获取的inputStream,
      // 这里使用的是获取web服务器上的XML文件的inputStream
      Document document = builder.parse(inputStream);

 这样就可以轻松获取到Document的实例了,下面看一下解析XML数据,其实也是挺简单的。解析的数据文本是:

 根据上述XML文本,解析数据

           //获取XML文件的“根”元素包括的内容,即最外从元素包含的内容
            Element documentElement = document.getDocumentElement();
            //获取子对象的全部内容,返回一个包含全部子对象的队列
            NodeList nodeList = documentElement.getElementsByTagName("user");
            for (int i = 0; i < nodeList.getLength(); i++) {
                //获取到nodeList的每一个子对象
                Element node = (Element) nodeList.item(i);
                //获取该对象node的属性 即数据的id
                String id = node.getAttribute("id");

                //再获取node下的子元素 队列
                NodeList nameList = node.getElementsByTagName("name");
                NodeList sexList = node.getElementsByTagName("sex");
                NodeList classesList = node.getElementsByTagName("classes");

                //提取数据
                String name = nameList.item(0).getTextContent();
                String sex = sexList.item(0).getTextContent();
                String classes = classesList.item(0).getTextContent();

                Log.e("nodeAttribute", id);
                Log.e("name",name);
                Log.e("sex",sex);
                Log.e("classes",classes);

            }

 解析的结果:

 

 结果是结束正确的。

 

 

下面看一下SAX解析XML文本数据。

SAX解析XML文档采用事件驱动模式。什么是事件驱动模式?它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理。

基于事件驱动的处理模式主要是基于事件源和事件处理器(或者叫监听器)来工作的。一个可以产生事件的对象叫做事件源,而一个可以针对事件做出响应的对象就被叫做事件处理器。

步聚:

  1. 创建DefaultHandler子类并实现一定相应的方法
  2. 创建解析器的工厂类SAXParserFactory
  3. 创建解析器的解析类SAXParser
  4. 获取XMLReader的实例
  5. 创建DefaultHandler子类注册到XMLReader当中
  6. 将从XML文件获取到的inputStream丢给XMLReader开始解析

实例代码:

 

            //获取解析器工厂类
            SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
            //获取解析器的解析类
            SAXParser saxParser = saxParserFactory.newSAXParser();
            //获取XMLReader实例
            XMLReader xmlReader = saxParser.getXMLReader();
            //XMLReader 与创建DefaultHandler子类关联(DefaultHandler注册到XMLReader)
            xmlReader.setContentHandler(new XMLHandlers());
            //开始解析,InputStream为从本地读取XML文件获得的InputStream
            // 或者是从web上获取的InputStream
            xmlReader.parse(new InputSource(inputStream));

 解析开始了,怎么来获取数据呢?还是用上面的XML文本数据

 

解析数据至少需要在创建DefaultHandler子类中复写以下三方法

 

 /**
     * 开始读取元素
     *
     * @param uri
     * @param localName 无前缀的标签
     * @param qName 有前缀的标签
     * @param attributes 属性集合
     * @throws SAXException
     */
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        Log.e("startElement", "startElement");
        this.localName = localName;
        if ("user".equals(localName)) {
            for (int i = 0; i < attributes.getLength(); i++) {
                Log.e("user_id", attributes.getValue("id"));
            }
        }

    }

 

 /**
     * 读取元素结束
     *
     * @param uri
     * @param localName 无前缀 的标签
     * @param qName 有前缀的标签
     * @throws SAXException
     */
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        Log.e("endElement", "endElement");
    }

 

 

 

/**
     * 解析数据
     *
     * @param ch 字符数组
     * @param start 开始位置
     * @param length 字符数组的长度
     * @throws SAXException
     */
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        Log.e("characters", "characters");
        if (localName.equals("name")) {
            name = new String(ch, start, length);
            Log.e("name", name);
        } else if (localName.equals("sex")) {
            sex = new String(ch, start, length);
            Log.e("sex", sex);
        } else if (localName.equals("classes")) {
            classes = new String(ch, start, length);
            Log.e("classes", classes);
        }
    }

 

 

析出来的数据,有点儿难看,但是仔细看也不难,而且还会发现一点儿奇怪的东西。

 

09-17 15:05:10.637    2535-2553/? E/startDocument﹕ startDocument
09-17 15:05:10.639    2535-2553/? E/startElement﹕ startElement
09-17 15:05:10.639    2535-2553/? E/characters﹕ characters
09-17 15:05:10.639    2535-2553/? E/characters﹕ characters
09-17 15:05:10.639    2535-2553/? E/startElement﹕ startElement
09-17 15:05:10.639    2535-2553/? E/user_id﹕ 1
09-17 15:05:10.639    2535-2553/? E/characters﹕ characters
09-17 15:05:10.639    2535-2553/? E/characters﹕ characters
09-17 15:05:10.639    2535-2553/? E/startElement﹕ startElement
09-17 15:05:10.639    2535-2553/? E/characters﹕ characters
09-17 15:05:10.639    2535-2553/? E/name﹕ gaosi
09-17 15:05:10.639    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.639    2535-2553/? E/characters﹕ characters
09-17 15:05:10.639    2535-2553/? E/name﹕ [ 09-17 15:05:10.639  2535: 2553 E/characters ]
    characters
09-17 15:05:10.639    2535-2553/? E/name﹕ [ 09-17 15:05:10.639  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.639    2535-2553/? E/characters﹕ characters
09-17 15:05:10.639    2535-2553/? E/sex﹕ 男
09-17 15:05:10.639    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.640    2535-2553/? E/characters﹕ characters
09-17 15:05:10.640    2535-2553/? E/sex﹕ [ 09-17 15:05:10.640  2535: 2553 E/characters ]
    characters
09-17 15:05:10.640    2535-2553/? E/sex﹕ [ 09-17 15:05:10.640  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.640    2535-2553/? E/characters﹕ characters
09-17 15:05:10.640    2535-2553/? E/classes﹕ 3
09-17 15:05:10.640    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.640    2535-2553/? E/characters﹕ characters
09-17 15:05:10.640    2535-2553/? E/classes﹕ [ 09-17 15:05:10.640  2535: 2553 E/characters ]
    characters
09-17 15:05:10.640    2535-2553/? E/classes﹕ [ 09-17 15:05:10.640  2535: 2553 E/endElement ]
    endElement
09-17 15:05:10.640    2535-2553/? E/characters﹕ characters
09-17 15:05:10.640    2535-2553/? E/classes﹕ [ 09-17 15:05:10.640  2535: 2553 E/characters ]
    characters
09-17 15:05:10.640    2535-2553/? E/classes﹕ [ 09-17 15:05:10.640  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.640    2535-2553/? E/user_id﹕ 2
09-17 15:05:10.640    2535-2553/? E/characters﹕ characters
09-17 15:05:10.640    2535-2553/? E/characters﹕ characters
09-17 15:05:10.640    2535-2553/? E/startElement﹕ startElement
09-17 15:05:10.640    2535-2553/? E/characters﹕ characters
09-17 15:05:10.640    2535-2553/? E/name﹕ 张
09-17 15:05:10.641    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.641    2535-2553/? E/characters﹕ characters
09-17 15:05:10.641    2535-2553/? E/name﹕ [ 09-17 15:05:10.641  2535: 2553 E/characters ]
    characters
09-17 15:05:10.641    2535-2553/? E/name﹕ [ 09-17 15:05:10.641  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.641    2535-2553/? E/characters﹕ characters
09-17 15:05:10.641    2535-2553/? E/sex﹕ 男
09-17 15:05:10.641    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.641    2535-2553/? E/characters﹕ characters
09-17 15:05:10.641    2535-2553/? E/sex﹕ [ 09-17 15:05:10.641  2535: 2553 E/characters ]
    characters
09-17 15:05:10.641    2535-2553/? E/sex﹕ [ 09-17 15:05:10.642  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.642    2535-2553/? E/characters﹕ characters
09-17 15:05:10.642    2535-2553/? E/classes﹕ 3
09-17 15:05:10.642    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.642    2535-2553/? E/characters﹕ characters
09-17 15:05:10.642    2535-2553/? E/classes﹕ [ 09-17 15:05:10.642  2535: 2553 E/characters ]
    characters
09-17 15:05:10.642    2535-2553/? E/classes﹕ [ 09-17 15:05:10.642  2535: 2553 E/endElement ]
    endElement
09-17 15:05:10.642    2535-2553/? E/characters﹕ characters
09-17 15:05:10.642    2535-2553/? E/classes﹕ [ 09-17 15:05:10.643  2535: 2553 E/characters ]
    characters
09-17 15:05:10.643    2535-2553/? E/classes﹕ [ 09-17 15:05:10.643  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.643    2535-2553/? E/user_id﹕ 3
09-17 15:05:10.643    2535-2553/? E/characters﹕ characters
09-17 15:05:10.643    2535-2553/? E/characters﹕ characters
09-17 15:05:10.643    2535-2553/? E/startElement﹕ startElement
09-17 15:05:10.643    2535-2553/? E/characters﹕ characters
09-17 15:05:10.643    2535-2553/? E/name﹕ 李四
09-17 15:05:10.643    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.643    2535-2553/? E/characters﹕ characters
09-17 15:05:10.643    2535-2553/? E/name﹕ [ 09-17 15:05:10.643  2535: 2553 E/characters ]
    characters
09-17 15:05:10.643    2535-2553/? E/name﹕ [ 09-17 15:05:10.643  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.643    2535-2553/? E/characters﹕ characters
09-17 15:05:10.643    2535-2553/? E/sex﹕ 男
09-17 15:05:10.643    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.643    2535-2553/? E/characters﹕ characters
09-17 15:05:10.643    2535-2553/? E/sex﹕ [ 09-17 15:05:10.643  2535: 2553 E/characters ]
    characters
09-17 15:05:10.643    2535-2553/? E/sex﹕ [ 09-17 15:05:10.644  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.644    2535-2553/? E/characters﹕ characters
09-17 15:05:10.644    2535-2553/? E/classes﹕ 2
09-17 15:05:10.644    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.644    2535-2553/? E/characters﹕ characters
09-17 15:05:10.644    2535-2553/? E/classes﹕ [ 09-17 15:05:10.644  2535: 2553 E/characters ]
    characters
09-17 15:05:10.644    2535-2553/? E/classes﹕ [ 09-17 15:05:10.644  2535: 2553 E/endElement ]
    endElement
09-17 15:05:10.644    2535-2553/? E/characters﹕ characters
09-17 15:05:10.644    2535-2553/? E/classes﹕ [ 09-17 15:05:10.644  2535: 2553 E/characters ]
    characters
09-17 15:05:10.644    2535-2553/? E/classes﹕ [ 09-17 15:05:10.644  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.644    2535-2553/? E/user_id﹕ 4
09-17 15:05:10.644    2535-2553/? E/characters﹕ characters
09-17 15:05:10.644    2535-2553/? E/characters﹕ characters
09-17 15:05:10.644    2535-2553/? E/startElement﹕ startElement
09-17 15:05:10.644    2535-2553/? E/characters﹕ characters
09-17 15:05:10.644    2535-2553/? E/name﹕ 王
09-17 15:05:10.644    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.644    2535-2553/? E/characters﹕ characters
09-17 15:05:10.644    2535-2553/? E/name﹕ [ 09-17 15:05:10.644  2535: 2553 E/characters ]
    characters
09-17 15:05:10.644    2535-2553/? E/name﹕ [ 09-17 15:05:10.644  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.644    2535-2553/? E/characters﹕ characters
09-17 15:05:10.644    2535-2553/? E/sex﹕ 女
09-17 15:05:10.644    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.644    2535-2553/? E/characters﹕ characters
09-17 15:05:10.645    2535-2553/? E/sex﹕ [ 09-17 15:05:10.645  2535: 2553 E/characters ]
    characters
09-17 15:05:10.645    2535-2553/? E/sex﹕ [ 09-17 15:05:10.645  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.645    2535-2553/? E/characters﹕ characters
09-17 15:05:10.645    2535-2553/? E/classes﹕ 2
09-17 15:05:10.645    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.645    2535-2553/? E/characters﹕ characters
09-17 15:05:10.645    2535-2553/? E/classes﹕ [ 09-17 15:05:10.645  2535: 2553 E/characters ]
    characters
09-17 15:05:10.645    2535-2553/? E/classes﹕ [ 09-17 15:05:10.645  2535: 2553 E/endElement ]
    endElement
09-17 15:05:10.645    2535-2553/? E/characters﹕ characters
09-17 15:05:10.645    2535-2553/? E/classes﹕[ 09-17 15:05:10.645  2535: 2553 E/characters ]
    characters
09-17 15:05:10.645    2535-2553/? E/classes﹕ [ 09-17 15:05:10.645  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.645    2535-2553/? E/user_id﹕ 5
09-17 15:05:10.645    2535-2553/? E/characters﹕ characters
09-17 15:05:10.645    2535-2553/? E/characters﹕ characters
09-17 15:05:10.645    2535-2553/? E/startElement﹕ startElement
09-17 15:05:10.645    2535-2553/? E/characters﹕ characters
09-17 15:05:10.645    2535-2553/? E/name﹕ 道
09-17 15:05:10.645    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.645    2535-2553/? E/characters﹕ characters
09-17 15:05:10.645    2535-2553/? E/name﹕ [ 09-17 15:05:10.645  2535: 2553 E/characters ]
    characters
09-17 15:05:10.645    2535-2553/? E/name﹕ [ 09-17 15:05:10.645  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.646    2535-2553/? E/characters﹕ characters
09-17 15:05:10.646    2535-2553/? E/sex﹕ 男
09-17 15:05:10.646    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.646    2535-2553/? E/characters﹕ characters
09-17 15:05:10.646    2535-2553/? E/sex﹕ [ 09-17 15:05:10.646  2535: 2553 E/characters ]
    characters
09-17 15:05:10.646    2535-2553/? E/sex﹕ [ 09-17 15:05:10.646  2535: 2553 E/startElement ]
    startElement
09-17 15:05:10.646    2535-2553/? E/characters﹕ characters
09-17 15:05:10.646    2535-2553/? E/classes﹕ 1
09-17 15:05:10.646    2535-2553/? E/endElement﹕ endElement
09-17 15:05:10.646    2535-2553/? E/characters﹕ characters
09-17 15:05:10.646    2535-2553/? E/classes﹕ [ 09-17 15:05:10.646  2535: 2553 E/characters ]
    characters
09-17 15:05:10.646    2535-2553/? E/classes﹕ [ 09-17 15:05:10.646  2535: 2553 E/endElement ]
    endElement
09-17 15:05:10.647    2535-2553/? E/characters﹕ characters
09-17 15:05:10.647    2535-2553/? E/classes﹕ [ 09-17 15:05:10.647  2535: 2553 E/characters ]
    characters
09-17 15:05:10.647    2535-2553/? E/classes﹕ [ 09-17 15:05:10.648  2535: 2553 E/characters ]
    characters
09-17 15:05:10.648    2535-2553/? E/classes﹕ [ 09-17 15:05:10.648  2535: 2553 E/characters ]
    characters
09-17 15:05:10.648    2535-2553/? E/classes﹕ [ 09-17 15:05:10.649  2535: 2553 E/endElement ]
    endElement
09-17 15:05:10.649    2535-2553/? E/endDocument﹕ endDocument

 对比以下Document解析,你有没有发现一点东西?

 

SAX  是逐行从上往下解析的,变扫描边解析。而document解析则是将整个XML文本读取扫描完毕,在从外往里一层一层的解析。

聪明的人就会想到,这样的话,我利用SAX解析,解析达到一定的条件,终止解析XML数据,这样就会简单很多了吧。对的。怎么方法类中断呢?

查看上面的解析结果,发现endDocument()是调用一次,可不可以到达特定的条件时候,调用该方法类终止解析呢?还有一种也可以使用return 来终止解析,是否可以呢?这两个都是不行的。

不知道有没有发现DefaultHandler子类的复写方法都会抛异常, 我们只要在解析达到特定的条件时候,抛异常就OK了

在调用解析方法出捕获一下异常

 

try{
                //XMLReader 与创建DefaultHandler子类关联(DefaultHandler注册到XMLReader)
                xmlReader.setContentHandler(new XMLHandlers());
                //开始解析,InputStream为从本地读取XML文件获得的InputStream
                // 或者是从web上获取的InputStream
                xmlReader.parse(new InputSource(inputStream));
            }catch (SAXException e){
                //TODO去干中断解析的工作吧
                //……
            }

 在characters()方法解析数据出等到达到特定条件就抛异常

 

 

if (localName.equals("name")) {
            name = new String(ch, start, length);
            Log.e("name", name);
            if (name.equals("gaosi")){
                super.endDocument();
                throw new SAXException("中断扫描,解析完成");
            }
        }

 看一下区别:

 总结:

 

Document:
       解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。
       优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;
       缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;
       使用场合:一旦解析了文档还需多次访问这些数据;
SAX:
       事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。
       优点:不用事先调入整个文档,占用资源少,可以随时停止
       缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;
       使用场合:只需XML文档的少量内容,很少回头访问;一次性读取;
       注意:SAX 解析器不创建任何对象。

在Android平台中,SAX解析更符合用户的而需求,不仅是简单,耗能少,耗时也少,内存需求少等

 

  • 大小: 27.3 KB
  • 大小: 38.3 KB
  • 大小: 25.6 KB
  • 大小: 44.8 KB
  • 大小: 23.6 KB
分享到:
评论

相关推荐

    android xml pull解析示例

    XML Pull解析器是基于事件驱动的解析方式,它会触发一系列事件(如开始标签、结束标签、文本数据等),开发者可以注册监听这些事件,从而实现对XML文档的解析。这种方式既节省内存又提高效率,特别适合处理大型XML...

    Android解析XML使用WebView显示

    以上就是“Android解析XML并使用WebView显示”的主要技术点,开发者需要理解并掌握这些知识点,才能在实际项目中顺利实现这一功能。通过不断实践和学习,我们可以更好地理解和运用这些工具,提升应用的质量和用户...

    android xml多种解析生成

    Pull 解析器是 Android 中的一种内置解析器,它可以将 XML 文件解析为一系列事件,然后使用回调函数处理这些事件。Pull 解析器的优点是它可以处理大型 XML 文件,并且可以实时处理 XML 文件。 使用 Pull 解析器可以...

    Android Dom解析XML

    DOM解析器读取XML文件并构建一个内存中的节点树,其中每个元素、属性、文本等都对应一个节点。在Android中,我们通常使用`javax.xml.parsers.DocumentBuilderFactory`来创建解析器,并通过`DocumentBuilder`实例解析...

    android XML本地解析实例

    2. SAX解析:Simple API for XML(SAX)是事件驱动的解析器,它按顺序读取XML文档,逐个触发事件。这种方式内存效率高,适合处理大文件,但编程相对复杂,需要编写事件处理器。 3. Pull解析:Pull解析器是SAX解析的...

    在android中使用pull解析xml文件

    本文将深入探讨如何在Android中使用Pull解析器解析XML文件。 一、XML Pull解析器简介 XML Pull解析器(XML Pull API)是一种基于事件驱动的解析模型,它不需预先加载整个XML文档,而是逐行读取,当遇到特定的XML...

    android之Pull解析XML文件

    本文将深入探讨如何在Android中使用Pull解析器来处理XML文件,这是一种高效且节省资源的方式。 Pull解析器是Android提供的一个API,它允许应用程序通过事件驱动的方式解析XML文档。与SAX解析器类似,Pull解析器不...

    Android studio下的XML pull 解析 demo

    XML Pull解析是Android开发中处理XML数据的一种高效方式,它允许开发者通过事件驱动的模型来解析XML文档。在Android Studio中,使用XML Pull解析器可以帮助我们更有效地读取和处理XML内容,尤其对于大型XML文件,...

    android中xml文件的解析.doc

    理解如何解析XML文件是至关重要的,本节将深入探讨Android中的三种XML解析方法:SAX、DOM和Pull解析。 **SAX解析** SAX(Simple API for XML)是一种基于事件驱动的解析方式,它不加载整个XML文档到内存,而是逐行...

    android mars视频代码 xml源码 XML解析

    学习XML解析的关键在于理解XML结构,熟悉解析器的工作原理,以及掌握如何在Android中使用解析器API来读取和操作XML数据。对于开发者来说,能够有效地解析和生成XML文档,不仅可以优化应用性能,还能提高代码的可维护...

    android的xml文件的解析

    1. 布局解析:Android系统使用DOM解析XML布局文件,构建View层次结构。 2. 资源文件:如字符串、颜色、尺寸等资源,通过DOM或Android的Resource类进行解析。 3. 配置文件:如AndroidManifest.xml,系统使用DOM解析以...

    Android开发之XML文件解析的使用

    5. 开始解析:最后,使用`XMLReader.parse(InputSource source)`方法开始解析XML数据。`InputSource`对象表示XML数据的来源,可以是文件、字符串或其他输入流。 以下是`MainActivity.java`中的关键代码片段,展示了...

    Android XML 解析笔记

    ### Android XML 解析知识点详述 #### 前言 在Android开发中,XML(可扩展标记语言)是一种常见的数据格式,特别是在不同平台之间进行数据交换时。由于XML具有跨平台的特点,它被广泛应用于数据通信领域。Android...

    android Dom解析xml文件

    本篇文章将深入探讨Android中的DOM解析XML文件,包括其基本原理、实现步骤和一些实用技巧。 ### 1. DOM解析的基本概念 DOM解析是一种将XML文件转换为内存中对象模型的方法。它将XML文档视为一棵树,其中每个元素、...

    android在线解析xml示例

    在Android平台上,XML(eXtensible Markup ...在提供的压缩包文件"AndroidXml"中,可能包含了一个简单的Android项目,演示了上述的XML解析过程。你可以通过运行这个示例来更深入地理解Android中XML在线解析的实现。

    使用Android自带的XML解析器PULL解析器简单的解析xml

    4. 开始解析:进入事件循环,不断调用`next()`方法,直到解析完整个XML文档。根据返回的事件类型,执行相应的操作。主要的事件类型包括`START_DOCUMENT`、`START_TAG`、`END_TAG`、`TEXT`等。 ```java int eventType...

    android XML三种解析及生成

    SAX解析器是基于事件驱动的解析模型,它逐行读取XML文档,遇到元素、属性、文本等时触发相应的事件回调。这种解析方式适用于大型XML文件,因为它占用的内存较少,但需要编写更多的代码来处理事件。SAX解析的基本步骤...

    [Android实例] Android之解析XML文件

    ### Android实例:解析XML文件 #### 一、引言 在Android开发中,解析XML文件是一项常见的需求。本文将详细介绍如何使用SAX(Simple API for XML)解析器来解析XML文件,并通过一个具体的实例来进行说明。 #### 二...

    android中使用PULL解析XML

    例如,从一个字符串输入源解析: ```java parser.setInput(new StringReader(xmlString)); ``` 3. **解析过程** 解析过程包括以下几个关键步骤: - 获取事件类型:使用`parser.getEventType()`方法,返回值可能...

    android 安卓xml pull解析

    这个项目可能包含了本地XML文件的读取和网络XML数据的下载与解析,供开发者学习参考。你可以通过查看源代码,了解如何在实际应用中集成XML Pull解析。 总结,XML Pull解析在Android开发中是一个重要的数据处理技术...

Global site tag (gtag.js) - Google Analytics