- 浏览: 239177 次
- 性别:
- 来自: 湖南
最新评论
-
yuxuejun1123:
为什么没有powerPC,个人觉得这篇文章把mips和powe ...
ARM MIPS PowerPC比较 -
yy232:
我刚学这个,有点疑问,希望你能为我解答 你说 “任何人只 ...
centos的用户、组权限、添加删除用户等操作的详细操作命令 -
wstxdz1023:
就那么几句代码,全是问题
socket 心跳
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.dom | W3C提供的使用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文件的读写只是基础,相信在以后的网络、数据库的开发中会经常使用。
http://www.moandroid.com/?p=508
发表评论
-
Linux x86 编译 Android 遭遇 gnu/stubs-64.h
2011-08-19 10:43 1873这两天心血来潮,执行完 repo sync 后,顺手来了一下 ... -
使用Cygwin下载Android代码树
2011-03-16 20:45 1589--官方说明-- To set up y ... -
Cygwin在win下下载android源代码
2011-03-16 20:43 1083首先下载cygwin,cygwin是一个类linux平台。即在 ... -
Android NDK 环境搭建 - 安装配置 Cygwin
2011-03-16 20:40 29661. NDK 下载 最新版 Android NDK 开发工具包 ... -
Android-触感反馈和声音反馈的效果实现
2011-03-15 12:07 29601)只有系统设置中打开触感反馈选项,方法performHa ... -
socket的服务端框架
2011-03-07 14:17 2708最近查了不少java下面nio ... -
android UI 优化系列之 创建RGB565的缓存
2011-03-05 16:42 1921关于如何优化activity的 ... -
SocketChannel 和 DatagramChannel
2011-03-05 16:19 1931SocketChannel 叫套接字通道,面向流,就是通 ... -
Android 调试工具集
2011-03-05 13:25 12841.TraceView1)功能:用于热点分析和性 ... -
Android 中文API (33) —— Checkable
2011-03-03 17:45 1121声明 欢迎转载,但请保留文章原始出处:) ... -
Toast 和 Looper
2011-03-03 09:02 1150Toast 和 Looper,一个属于 android.w ... -
Activity 与 Main Loope
2011-03-03 08:59 1035上文抛出了一个疑问:UI 线程是在哪里绑定 Looper ... -
Class loading in Android : Begin with PathClassLoader
2011-03-03 08:56 1195Google 在 Android 文档里的《What is ... -
Linux x86 编译 Android 遭遇 gnu/stubs-64.h
2011-03-03 08:54 1264这两天心血来潮,执行完 repo sync 后,顺手来了一 ... -
读《Multitasking the Android Way》(一)
2011-03-03 08:50 1180Android Developers Blog 发表了一篇 ... -
从 Remote Service Binding 学习 AIDL 与 IPC
2011-03-03 08:47 1573默认情况下,一个应用不管有多少个 Activity、Ser ... -
Android SDK Add-on Configure, Compile and Release
2011-03-03 08:44 1925SDK Add-on 是一个比较小众的话题,一是通常厂商不 ... -
Activity Task 与 Intent Filter Flag
2011-03-03 08:42 1259接触 Android 以来,一直觉得对 task、affi ... -
android的原理,不需要太多的剩余内存
2011-03-02 16:05 934不用在意剩余内存的大 ... -
Android IPC框架分析 Binder,Service,Service manager
2011-03-02 15:19 1405我首先从宏观的角度 ...
相关推荐
Android读写XML(上)——package说明.doc Android读写XML(下)——创建XML文档.doc Android读写XML(中)——SAX.doc Android高手进阶教程之----Android Handler的使用!!! .doc Android高手进阶教程之----Android ...
在安卓(Android)平台上开发应用程序时,源码的分析与理解是提升开发技能和优化代码质量的关键步骤。这里我们关注的是一个名为“安卓Android源码——日记本”的项目,这通常是一个简单的日记应用的源码实现。源码...
这个压缩包文件“安卓Android源码——自己写的下载自动安装demo.rar”包含了关于安卓应用程序开发的知识点,特别是涉及到了如何实现一个自动下载并安装的应用程序功能。以下是对这些内容的详细解析: 首先,从标题...
综上所述,“安卓Android源码——数据库文件写入SD卡.zip”这个资源提供了Android应用将SQLite数据库文件写入SD卡的具体实现,涵盖了权限请求、文件操作和数据库管理等多个关键知识点。开发者可以以此为基础,进一步...
这份“安卓Android源码——学习之数据存储.zip”压缩包很可能是针对Android系统中数据存储方式的源代码分析和教程。在这里,我们将深入探讨Android中的几种主要数据存储方式。 1. **Shared Preferences**: Shared...
Android应用的四大组件——Activity、Service、BroadcastReceiver和ContentProvider,都需要在AndroidManifest.xml中进行声明。例如,Activity的声明如下: ```xml <activity android:name=".HelloActivity"> ...
例如,如果你创建了一个名为`pref_name`的SharedPreferences,那么对应的XML文件可能是`/data/data/your_package_name/shared_prefs/pref_name.xml`。 3. **数据访问:** - 使用`getDefaultSharedPreferences...
8. **权限管理**:在Android 10及以上版本,文件存储权限进行了调整,应用需要适配Scoped Storage,以便安全地读写文件。 9. **用户通知**:当有新的更新信息时,可以通过Notification API向用户发送提醒。 10. **...
- **工具链**:Android提供了两种工具链来编译JNI代码——Android源码中的工具链和NDK工具链。 - **Android JNI特殊之处**:Android的JNI环境有一些特定的要求,比如需要遵守特定的目录结构。 - **打包安装**:完成...
- 在Android中,访问短信数据库通常通过ContentProvider实现,它提供了标准的接口来读写短信数据。应用可能有一个自定义的`SmsProvider`来管理短信的CRUD操作。 6. **数据库操作** - 数据库文件通常位于`/data/...
1. **存储结构**:Android设备有两种主要的存储区域——内部存储和外部存储(SD卡)。内部存储通常用于应用程序私有的数据,而外部存储则用于公共数据或用户可访问的数据。 2. **文件操作**:Android提供了`java.io...
【Android 源代码分析——彩色弹珠游戏】 在Android平台上开发游戏,开发者通常会利用Java语言和Android SDK来创建丰富的交互式应用。本项目"彩色弹珠游戏"提供了完整的源代码,它是一个简单的休闲游戏,玩家通过...
《Android Studio项目源码分析——构建食品商店购物系统》 在Android开发领域,掌握源码分析是一项必备技能,尤其对于初学者来说,通过研究实际项目的源码,可以深入理解应用程序的工作原理,提升自身的编程能力。...
1. **APK文件**:APK是Android Application Package的缩写,它是Android平台上的软件包文件格式。当开发者完成一个Android应用的开发后,会通过编译打包过程生成APK文件,用户可以通过安装APK来在Android设备上运行...