4.1 解析 XML 数据的三种方式详解

点此进入:从零快速构建APP系列目录导图
点此进入:UI编程系列目录导图
点此进入:四大组件系列目录导图
点此进入:数据网络和线程系列目录导图

通常情况下,每个需要访问网络的应用程序都会有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器上获取数据。不过这个时候就出现了一个问题,这些数据到底要以什么样的格式在网络上传输呢?随便传递一段文本肯定是不行的,因为另一方根本就不会知道这段文本的用途是什么。因此,一般我们都会在网络上传输一些格式化后的数据,这种数据会有一定的结构规格和语义,当另一方收到数据消息之后就可以按照相同的结构规格进行解析,从而取出他想要的那部分内容。

在网络上传输数据时最常用的格式有两种, XML 和 JSON,下面我们就来一个个地进行学习,本篇首先学一下如何解析 XML 格式的数据。

本节例程下载地址:WillFLowXML

一、XML数据要点介绍

1、首先介绍一下xml语言

可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

2、xml的语法

XML 分为两部分:头信息,主体信息
  • 头信息是用来描述 XML 的一些属性,例如:版本,编码等,还可以提供 XML 显示的样式,和 dtd 编写格式。
  • 主体信息中包含的是 XML 的具体数据。
头信息的语法:
<?xml version =”1.0” encoding =”GBK” ?>

其中 version 是必须加的,而 encoding 可以不写,则默认编码是 ISO8859-1 ,不支持中文。除了这个功能外,头信息还可以进行编写格式的规定,通过 dtd 或 xsd 文件。头信息还支持样式表的导入,允许通过样式表控制 XML 的显示。

这样可以使用 XML+ CSS 完成页面的显示,通过这种形式完成 MVC 中的 View 层:
- 优点:代码的安全性很高,可以很容易的替换模板。
- 缺点:开发成本太高。

二、XML常用三种解析方式的优缺点

(1)DOM(Document Object Model)

文档对象模型分析方式。以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取和操作文档的任意部分,是W3C的官方标准。

优点:
1、允许应用程序对数据和结构做出更改。
2、访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。

缺点:
通常需要加载整个XML文档来构造层次结构,消耗资源大

(2)SAX(Simple API for XML)

流模型中的推模型分析方式。通过事件驱动,每发现一个节点就引发一个事件,通过回调方法完成解析工作,解析XML文档的逻辑需要应用程序完成。

优点:
1、不需要等待所有数据都被处理,分析就能立即开始。
2、只在读取数据时检查数据,不需要保存在内存中。
3、可以在某个条件得到满足时停止解析,不必解析整个文档。
4、效率和性能较高,能解析大于系统内存的文档。

缺点:
1、需要应用程序自己负责TAG的处理逻辑(例如维护父/子关系等),使用麻烦。
2、单向导航,很难同时访问同一文档的不同部分数据,不支持XPath。

(3)XMLPull解析

一种基于事件流的解析方案、类似于SAX解析、Android中推荐的一种解析方案、Android 中内置了XMLPull解析的API。

Pull解析和Sax解析不一样的地方有:
1、pull读取xml文件后触发相应的事件调用方法返回的是数字
2、pull可以在程序中控制想解析到哪里就可以停止解析。

三、用三种方式解析XML

1、准备工作

首先,我们在主界面定义好四个按钮以及用于内容展示的ListView,代码如下:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.wgh.willflowxml.MainActivity">

    <Button
        android:id="@+id/button_dom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="DOM解析"
        android:textColor="#0787ff"
        android:textSize="22dp" />

    <Button
        android:id="@+id/button_sax"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="SAX解析"
        android:textColor="#f13232"
        android:textSize="22dp" />

    <Button
        android:id="@+id/button_pull"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="PULL解析"
        android:textColor="#fc7711"
        android:textSize="22dp" />

    <ListView
        android:id="@+id/list_view"
        android:layout_width="356dp"
        android:layout_height="437dp"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp">
    </ListView>

</android.support.constraint.ConstraintLayout</
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值