首页 > Android读写XML(上)

Android读写XML(上)

XML 经常用作 Internet 上的一种数据格式,其文件格式想必大家都比较清楚,在这里我结合Android平台,来说明Android SDK提供的读写XML的package。

首先介绍下Android SDK与Java SDK在读写XML文件方面,数据包之间的关系。Android 平台最大的一个优势在于它利用了 Java 编程语言。Android SDK 并未向标准 Java Runtime Environment (JRE) 提供一切可用功能,但它支持其中很大一部分功能。Java 平台支持通过许多不同的方式来使用 XML,并且大多数与 XML 相关的 Java API 在 Android 上得到了完全支持。举例来说,Java 的 Simple API for XML (SAX) 和 Document Object Model (DOM) 在 Android 上都是可用的,这些 API 多年以来一直都是 Java 技术的一部分,较新的 Streaming API for XML (StAX) 在 Android 中并不可用。但是, Android 提供了一个功能相当的库。最后,Java XML Binding API 在 Android 中也不可用,这个 API 已确定可以在 Android 中实现。Android SDK提供了如下package来支持XML的读写:

功能介绍
javax.xml根据 XML 规范定义核心 XML 常量和功能。
javax.xml.parsers提供DOM和SAX方法解析XML文档
org.w3c.domW3C提供的使用DOM方法读取XML
org.xml.sax提供核心SAX APIs
org.xmlpull.v1.

额外补充说明下,在android.util数据包中也提供了一个类Xml,不过这个类就是把以上package简单封装了下。

读取XML主要有2种方法:DOM与SAX(Simple API for XML),在这里对这2种方法分别加以说明。

DOM(文档对象模型),为XML文档的解析定义了一组接口,解析器读入整个文档,然后构造一个驻留内存的树结构,然后代码就可以使用DOM接口来操组整个树结构,其他点如下:

  • 优点:整个文档树都在内存当中,便于操作;支持删除、修改、重新排列等多功能。
  • 缺点:将整个文档调入内存(经常包含大量无用的节点),浪费时间和空间。
  • 使用场合:一旦解析了文档还需要多次访问这些数据,而且资源比较充足(如内存、CPU等)。

为了解决DOM解析XML引起的这些问题,出现了SAX。SAX解析XML文档为事件驱动,详细说明请阅读Android读写XML(中)-SAX。当解析器发现元素开始、元素结束,文本、文档的开始或者结束时,发送事件,在程序中编写响应这些事件的代码,其特点如下:

  • 优点:不用事先调入整个文档,占用资源少。尤其在嵌入式环境中,极力推荐采用SAX进行解析XML文档。
  • 缺点:不像DOM一样将文档长期驻留在内存,数据不是持久的,事件过后,如没有保存数据,那么数据就会丢失。
  • 使用场合:机器性能有限,尤其是在嵌入式环境,如Android,极力推荐采用SAX进行解析XML文档。

大多数时间,使用 SAX 是比较安全的,并且 Android 提供了一种传统的 SAX 使用方法,以及一个便捷的 SAX 包装器。如果XML文档比较小,那么 DOM 可能是一种比较简单的方法。如果XML文档比较大,但只需要文档的一部分,则 XML Pull 解析器可能是更为有效的方法。最后对于编写 XML,Pull 解析器包也提供了一种便捷的方法,详细说明请阅读Android读写XML(下)--数据写入XML文档。因此,无论我们的 XML 需求如何,Android 都能在一定程度上满足我们的需求。

下面我们详细介绍采用DOM的方法,读取XML文档的思路,这基本上与XML的结构是完全一样的。首先加载XML文档(Document),然后获取文档的根结点(Element),然后获取根结点中所有子节点的列表(NodeList),然后使用再获取子节点列表中的需要读取的结点。根据以上思路,简要写个读取XML文件的例子如下:

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;

import android.content.Context;

void ReadXML()

{

DocumentBuilderFactory docBuilderFactory
= null;

DocumentBuilder docBuilder
= null;

Document doc
= null;

try {

docBuilderFactory
= DocumentBuilderFactory.newInstance();

docBuilder
= docBuilderFactory.newDocumentBuilder();

//xml file 放到 assets目录中的

doc = docBuilder.parse(context.getResources().getAssets().open(”weather.xml”));

//root element

Element root = doc.getDocumentElement();

//Do something here

//get a NodeList by tagname

NodeList nodeList = root.getElementsByTagName(”tag”);

for(int i =0;i< nodeList.getLength();i++)

{

Node nd
= nodeList.item(i);

//Read Node

}

}
catch (IOException e) {

}
catch (SAXException e) {

}
catch (ParserConfigurationException e) {

}
finally {

doc
= null;

docBuilder
= null;

docBuilderFactory
= null;

}

}

 

 

以上代码比较简单,就不在此详细解析了。

采用DOM读取XML文件,需要加载整个XML文件,在XML文件比较大的情况下,会导致Android设备内存紧张,为了避免这个问题,也可以采用SAX的方法读取XML文件,不过SAX对结点的排序、增加结点等方面的操作相比DOM就有些复杂了。根据XML文件大小、数据处理的需求,选择合适的读取的方法。

对于XML的写入,一方面可以采用前面介绍的这些package;另外一方面也可以按照XML的标准,将数据以字符串的形式直接写入文件,这也是种很不错的方法。在这里推荐IBM开源社区中一篇比较好的文章 Android 上使用 XML,有兴趣的可以去深入学习下。

总结说明

XML作为一种简单的文件格式,作为网络上数据交换的基础,而且得到了大部分数据库的支持(直接将XML文件插入数据库),XML文件的读写只是基础,相信在以后的网络、数据库的开发中会经常使用。

转载于:https://www.cnblogs.com/gaoyoubo/articles/1856675.html

更多相关:

  • 转自https://github.com/SXHSine/Mitsuba-Usage-with-Python27 # -*- coding: UTF-8 -*- import os import sys # NOTE: remember to specify paths using FORWARD slashes (i.e. '/'...

  • xml的格式如下,就是通过<>节点来区别数据结构的: 22008141100

    .NET调用JAVA的WebService方法

      调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,在网上也有相关资料,但是都整理的不够清晰明了。根据网上的资料,个人也对各种方法进行了尝试,费了不少精力,为此特将自己的解决方法进行总结一下,以备以后需要...

  •  FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.         一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH...

  • 导读:在前面介绍了很多关于XML和HTML的东西,他们其实各有各的好处,在很多时候都需要结合起来使用。现在已经有XML和HTML结合的产物:XHTML(可扩展超文本标记语言)。在本篇博客中,则主要介绍通过引入命名空间的方法,进行XML和HTML混合使用的例子。 一、在XML中使用HTML 1.1,代码

    python中的daemon守护进程实现方法

    参考文档...

  • 有好几天没有更新博客了,前段时间因为要开学了,需要凑足学费才能继续在学校学习,耽误了几天,这两天需要补充前面需要学习的一些知识点了。今天就开始进入JavaWeb阶段吧,这段时间我们需要了解一些前端的知识,还有数据库方面的等等,具体的我下次回顾的时候再谈,今天就开始XML方面的一些基础知识的回顾吧!!   一. xml概述 1.1.xm...

  • zeal是一个windows上的开源的离线文档浏览工具,基于docset格式,可以兼容全部dash的文档。zeal没有代码片段管理的功能,只提供文档浏览功能,不过windows下的用户可算是有的用了。dash目前只提供mac上的版本,作者说有往windows上移植的打算,但迟迟没有动工。 刚安装好之后是没有文档可以看的, 需要自己下...

  • 2019独角兽企业重金招聘Python工程师标准>>> 王超:奇虎360MongoDB     MongoDB是高性能开源文档数据库,也是目前最受关注的NoSQL技术之一,以敏捷、可扩展和对企业应用友好(支持事务,一致性和数据完整性保证。该文档具体讲到了奇虎360为什么会使用MongoDB?MonoDB在亿级数据规模...

  •    本来不打算写这个博客的,我讨厌的话题,但是现实中遇到很多事情让我觉得是我沟通有问题!沟通是两个人的事情,做技术的人你和别人沟通需要看对方是什么水平的人,啥也不懂,啥也不会的人,你用那么专业的术语来描述,肯定解决不了问题。最好是举一些通俗易懂的例子    作为一个新人,我们应该在遇到问题的时候,先自己尝试去了解一些东西,比如:一...

  • android:id 为控件指定相应的IDandroid:text 指定控件的文本,置尽量使用strings.xmlandroid:grivity 指定控件的基本位置 ,比如举重,居右,android:padding 指定控件的内边距,控件当中的内容android:singleLine 如果设置为真的话,则将控件的内容在同一行当中显示...

  • 布局主要分两个 其中主布局是

  • 大家平时见到的最多的可能就是Frame动画了,Android中当然也少不了它。它的使用更加简单,只需要创建一个 AnimationDrawabledF对象来表示Frame动画,然后通过addFrame 方法把每一帧要显示的内容添加进去,并设置播放间隔时间,本例子中间隔时间为5S, 最后通过start 方法就可。 以播放这个动画了,...

  • 作业要求: 作一个显示框里面分成三行 一二行占这个框的1/2 第三行独占1/2 第三行里面分成两列第一列占25%,第二列占75%。 屏幕显示效果 实现步骤:  

  • 一:Service简介 Android开发中,当需要创建在后台运行的程序的时候,就要使用到Service。 1:Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件。其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行。另外,一个组件能够绑定到一个service与之交...