- 浏览: 1225263 次
- 性别:
- 来自: 荆州
文章分类
- 全部博客 (396)
- Android 基础 (72)
- Java 基础 (42)
- Android(动画效果) (26)
- Android(自定义组件) (13)
- Android(手机服务) (38)
- Android(网络相关) (27)
- Android(多媒体) (12)
- Android(小技巧) (30)
- Android(用户界面) (39)
- 基础概念 (24)
- Android组件学习 (21)
- Android数据库相关 (11)
- 生活杂谈 (10)
- 调试技巧部分 (8)
- Sql Server相关 (1)
- Android(xml相关) (2)
- Android 开发 (12)
- 韩语学习 (4)
- Mac添加环境变量的三种方法 (1)
- iPhone开发 (1)
- Android Studio (1)
最新评论
-
ppfbsar:
下载网络文件到SD卡上 -
851228082:
好文!彻底理解单类型导入与按需导入的区别了。还有一点可以通过 ...
谈java的导入(import) -
麦田的设计者:
老乡啊
sqlite 数据库保存图片 -
sf_dream:
我要是读写list、map之类的集合呢
ObjectOutputStream和ObjectInputStream类的学习 -
xfyunyun:
博主,请问webview加载html字符串时怎么进行缓存处理呢 ...
WebView使用总结2(加载HTML内容形式的String)
这个例子是进一步熟悉DOM解析xml文件的方法,附带基础的文档说明,大部分内容来自于EOE论坛的帖子消息:
先直接上代码:
1.DomStudy.java文件
2.assets文件夹中test.xml文件
下面对这个例子进行必要的文档分析:
DOM是Document Object Model的缩写,即文档对象模型.
xml数据将组织为一棵树,所以DOM就是对这棵树的对象描述.
下面通过一个简单的例子进行学习:
<?xml version="1.0" encoding="UTF-8"?>
<messages>
<message>Good-bye serialization, hello Java!</message>
</messages>
step 1:我们需要建立一个解析器工厂,以利用这个工厂获得一个具体的解析器对象:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
PS:使用DocumentBuilderFactory的目的是为了创建与具体解析器无关的程序,当调用
newInstance()的静态方法时,它会根据一个系统变量来决定具体使用那个解析器,
又因为所有解析器都服从于JAXP所定义的接口,所以无论具体使用那个解析器,代码都
是一样的.所以在不同的解析器之间切换时,只需要修改系统变量的值,而不用更改任何代码.
step 2:当获得一个工厂对象后,使用它的静态方法newDocumentBuilder()就可以获得一个
DocumentBuilder对象,这个对象代表了具体的DOM解析器,但具体是哪一种解析器,
微软的,IBM的,对于程序而言,并不重要;
DocumentBuilder db = dbf.newDocumentBuilder();
step 3:DocumentBuilder的parse()方法接受一个XML文档名作为输入参数,返回一个Document对象,
这个Document对象就代表了一个XML文档的树模型。以后所有的对XML文档的操作,都与解析
器无关,直接在这个Document对象上进行操作就可以了。而具体对Document操作的方法,就
是由DOM所定义的了
Document doc = db.parse("c:/xml/message.xml");
也可以在android中这样定义:
在assets文件夹中建立一个test.xml文件,就是上述xml内容,
InputStream is = getAssets().open("test.xml");
然后通过Document doc = db.parse(is);获取这个Document对象进行操作:
PS:Jaxp支持W3C所推荐的DOM 2。如果你对DOM很熟悉,那么下面的内容就很简单了:只需要按照DOM的
规范来进行方法调用就可以。当然,如果你对DOM不清楚,也不用着急,后面我们会有详细的介绍。
在这儿,你所要知道并牢记的是:DOM是用来描叙XML文档中的数据的模型,引入DOM的全部原因就
是为了用这个模型来操作XML文档的中的数据。DOM规范中定义有节点(即对象)、属性和方法,
我们通过这些节点的存取来存取XML的数据。
从Document对象开始,我们就可以开始我们的DOM之旅了。使用Document对象的getElementsByTagName()
方法,我们可以得到一个NodeList对象,一个Node对象代表了一个XML文档中的一个标签元素,而NodeList
对象,观其名而知其意,所代表的是一个Node对象的列表
step 4: NodeList nl = doc.getElementsByTagName("message");
我们通过这样一条语句所得到的是XML文档中所有<message>标签对应的Node对象的一个列表。
然后,我们可以使用NodeList对象的item()方法来得到列表中的每一个Node对象
Node my_node = nl.item(0);
当一个Node对象被建立之后,保存在XML文档中的数据就被提取出来并封装在这个Node中了。在这个例子
中,要提取Message标签内的内容,我们通常会使用Node对象的getNodeValue()方法:
String message = my_node.getFirstChild().getNodeValue();
PS:请注意,这里还使用了一个getFirstChild()方法来获得message下面的第一个子Node对象。虽然在message标
签下面除了文本外并没有其它子标签或者属性,但是我们坚持在这里使用getFirseChild()方法,这主要和W3C对
DOM的定义有关。W3C把标签内的文本部分也定义成一个Node,所以先要得到代表文本的那个Node,我们才能够使
用getNodeValue()来获取文本的内容。现在,既然我们已经能够从XML文件中提取出数据了,我们就可以把这些
数据用在合适的地方,来构筑应用程序
先直接上代码:
1.DomStudy.java文件
package cn.com; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import android.app.Activity; import android.os.Bundle; public class DomStudy extends Activity { String xml = ""; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try { parseXml(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void parseXml() throws IOException { // 建立一个解析器工厂,以利用这个工厂来获得一个具体的解析器对象 // 使用DocumentBuilderFacotry的目的是为了创建与具体解析器无关的程序, // 当DocumentBuilderFactory类的静态方法newInstance()被调用时, // 它根据一个系统变量来决定具体使用哪一个解析器 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); InputStream is = getAssets().open("test.xml"); // parse()方法 // 接受一个XML文档名作为输入参数 // 接受一个输入流 // 返回一个Document对象,代表了一个XML文档的树模型 // 以后所有的对XML文档的操作,都与解析器无关,直接在这个Document对象上进行操作就可以了 Document doc = db.parse(is); NodeList nl = doc.getElementsByTagName("message"); System.out.println("nl.getLength() ==========" + nl.getLength()); Node my_node = nl.item(0); if (my_node.hasAttributes()) { System.out.println("++++++++++++++++++" + my_node.getAttributes().getNamedItem("id") .getNodeValue()); } String message = my_node.getFirstChild().getNodeValue(); System.out.println("**********8888message ==" + message); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
2.assets文件夹中test.xml文件
<?xml version="1.0" encoding="UTF-8"?> <messages> <message id="1">Good-bye serialization, hello Java!</message> <message id="2">Good-bye serialization, hello Java!</message> <message id="3">Good-bye serialization, hello Java!</message> </messages>
下面对这个例子进行必要的文档分析:
DOM是Document Object Model的缩写,即文档对象模型.
xml数据将组织为一棵树,所以DOM就是对这棵树的对象描述.
下面通过一个简单的例子进行学习:
<?xml version="1.0" encoding="UTF-8"?>
<messages>
<message>Good-bye serialization, hello Java!</message>
</messages>
step 1:我们需要建立一个解析器工厂,以利用这个工厂获得一个具体的解析器对象:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
PS:使用DocumentBuilderFactory的目的是为了创建与具体解析器无关的程序,当调用
newInstance()的静态方法时,它会根据一个系统变量来决定具体使用那个解析器,
又因为所有解析器都服从于JAXP所定义的接口,所以无论具体使用那个解析器,代码都
是一样的.所以在不同的解析器之间切换时,只需要修改系统变量的值,而不用更改任何代码.
step 2:当获得一个工厂对象后,使用它的静态方法newDocumentBuilder()就可以获得一个
DocumentBuilder对象,这个对象代表了具体的DOM解析器,但具体是哪一种解析器,
微软的,IBM的,对于程序而言,并不重要;
DocumentBuilder db = dbf.newDocumentBuilder();
step 3:DocumentBuilder的parse()方法接受一个XML文档名作为输入参数,返回一个Document对象,
这个Document对象就代表了一个XML文档的树模型。以后所有的对XML文档的操作,都与解析
器无关,直接在这个Document对象上进行操作就可以了。而具体对Document操作的方法,就
是由DOM所定义的了
Document doc = db.parse("c:/xml/message.xml");
也可以在android中这样定义:
在assets文件夹中建立一个test.xml文件,就是上述xml内容,
InputStream is = getAssets().open("test.xml");
然后通过Document doc = db.parse(is);获取这个Document对象进行操作:
PS:Jaxp支持W3C所推荐的DOM 2。如果你对DOM很熟悉,那么下面的内容就很简单了:只需要按照DOM的
规范来进行方法调用就可以。当然,如果你对DOM不清楚,也不用着急,后面我们会有详细的介绍。
在这儿,你所要知道并牢记的是:DOM是用来描叙XML文档中的数据的模型,引入DOM的全部原因就
是为了用这个模型来操作XML文档的中的数据。DOM规范中定义有节点(即对象)、属性和方法,
我们通过这些节点的存取来存取XML的数据。
从Document对象开始,我们就可以开始我们的DOM之旅了。使用Document对象的getElementsByTagName()
方法,我们可以得到一个NodeList对象,一个Node对象代表了一个XML文档中的一个标签元素,而NodeList
对象,观其名而知其意,所代表的是一个Node对象的列表
step 4: NodeList nl = doc.getElementsByTagName("message");
我们通过这样一条语句所得到的是XML文档中所有<message>标签对应的Node对象的一个列表。
然后,我们可以使用NodeList对象的item()方法来得到列表中的每一个Node对象
Node my_node = nl.item(0);
当一个Node对象被建立之后,保存在XML文档中的数据就被提取出来并封装在这个Node中了。在这个例子
中,要提取Message标签内的内容,我们通常会使用Node对象的getNodeValue()方法:
String message = my_node.getFirstChild().getNodeValue();
PS:请注意,这里还使用了一个getFirstChild()方法来获得message下面的第一个子Node对象。虽然在message标
签下面除了文本外并没有其它子标签或者属性,但是我们坚持在这里使用getFirseChild()方法,这主要和W3C对
DOM的定义有关。W3C把标签内的文本部分也定义成一个Node,所以先要得到代表文本的那个Node,我们才能够使
用getNodeValue()来获取文本的内容。现在,既然我们已经能够从XML文件中提取出数据了,我们就可以把这些
数据用在合适的地方,来构筑应用程序
发表评论
-
WebView加载网页进度条显示
2012-03-06 19:52 2345重写WebChromeClient一个方法进行进度条显示: ... -
基于UDP协议的数据交互例子
2011-12-18 11:06 1703直接贴上代码: 客户端: package com.exam ... -
一种更灵活的数据传输方式:HTTP(2)
2011-12-16 11:18 2987HTTP是大多数应用程序中常用的与服务端交互的通讯方式 ... -
一种更灵活的数据传输方式:HTTP(1)
2011-12-16 10:52 1948使用WebService虽然 ... -
重用WebView的cache图片文件
2011-09-15 15:06 2031如何从WebView使用的cache文件夹中重复使用一些图片资 ... -
开,关闭GPRS的简单Demo
2011-06-09 10:54 2731Android应用中开,关闭GPRS的简单Demo,可能在有的 ... -
Intent打开各种类型文件
2011-04-10 18:22 4419//android获取一个用于打开PPT文件的intent ... -
图片Url保存为位图并进行缩放操作
2010-10-12 15:33 13561.通过传入图片url获取位图方法: public Bit ... -
判断手机有无网络
2010-09-15 16:18 2839ConnectivityManager cwjManage ... -
GoogleMap(通过输入地址,查询显示在google 地图上)
2010-08-15 10:18 4651主Activity: package net.blogja ... -
Android手机使用中国电信天翼上网设置
2010-08-07 16:01 3843众所周知Android手机的上网功能需要用到APN(网络接入点 ... -
GPS取得卫星个数
2010-08-07 15:09 2937LocationManager manager = (Lo ... -
连接服务器超时的Demo
2010-08-05 11:49 2416下面这个例子是连接网络超时的例子: package cn. ... -
下载网络文件到SD卡上
2010-08-02 19:07 3369下面一个一个类的来进行介绍: 1.DownLoadProgre ... -
下载网路图片到SD卡上新建文件夹当中
2010-07-27 22:52 31901.DownloadImages.java文件 packa ... -
sax方式解析xml文件(asset文件和网络文件)
2010-07-11 17:16 1965现在写了些博客后,变懒 ... -
xml中DOM对象的学习
2010-07-03 13:57 1282DOM的基本对象有5个:Doc ... -
DOM方式解析xml文件2(解析本地xml)
2010-07-01 20:42 1585这个与1的方法唯一不同的就是传递InputSource的参数: ... -
DOM方式解析xml文件1(解析网路xml)
2010-07-01 20:14 1585其实网上很多资料讲关 ... -
下载显示网路图片的例子
2010-07-01 10:46 1484一个很简单的例子,直接上代码: 1. ShowUrlImage ...
相关推荐
Android提供了多种方式来读取XML资源,包括从assets目录、res/raw目录或网络中加载。这里我们假设XML文件已经存储在项目的assets目录下,名为“myxml.xml”。 ```java InputStream inputStream = context.getAssets...
DOM解析方式允许开发者一次性加载整个XML文档到内存中,形成一个树形结构,便于遍历和操作。尽管对于大型XML文件,DOM解析可能因消耗大量内存而效率低下,但在处理小型XML文件时,DOM方法具有简洁和方便的优点。 ...
在实际应用中,如果XML文件较小,DOM解析可能是个好选择,因为其提供了一种直观的节点遍历方式。而大型XML文件更适合用Pull或SAX解析,以减少内存消耗。根据具体需求,开发者可以灵活选择解析方式。 在提供的压缩包...
本节将详细介绍Android中使用DOM方式解析XML文件的方法,并通过一个示例来阐述整个过程。 DOM(Document Object Model)解析器是一种将XML文档转换为树形结构的模型,它允许开发者通过遍历这棵树来访问和修改XML...
本文将详细介绍如何使用DOM(Document Object Model)方式在Android中创建和解析XML文件。DOM是一种将XML文档映射为一棵树形结构的模型,允许开发者通过节点操作来处理XML数据。 首先,我们需要了解DOM解析的基本...
以下是如何在Android中使用DOM解析XML文件的基本步骤: 1. 引入必要的库: 在Java代码中,需要导入`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`等相关类库。 2. 创建...
总结,Android中XML解析的三种方式各有优缺点:SAX适合大文件,低内存占用;DOM适合灵活操作,但内存需求大;PULL结合了两者优点,既高效又易于使用。根据实际项目需求和资源限制,开发者可以选择最适合的XML解析...
以上代码展示了如何使用DOM解析XML文件,并将其数据存储在自定义的Java对象中。虽然DOM解析在处理大型XML文件时效率较低,但它的简单性和易于使用使其成为许多小型应用的首选。在处理大量数据或内存有限的场景下,...
DOM(Document Object Model)解析器将整个XML文件加载到内存中,形成一个树形结构,允许开发者通过API遍历整个文档。虽然DOM解析提供了方便的访问机制,但它的缺点在于,如果XML文件较大,会占用大量内存,对性能...
本文实例讲述了Android中DOM解析xml文件的方法。分享给大家供大家参考,具体如下: 一、在assets文件中写xml文件 <?xml version=1.0 encoding=UTF-8?> 李明 <age>30 李向梅 <age>25 二、在...
它的核心类是`org.xmlpull.v1.XmlPullParser`,它提供了一种迭代的方式解析XML,通过不断调用`next()`方法来获取下一个XML事件,如开始标签、结束标签、文本等。 三、Pull解析器的基本使用 1. 创建解析器:首先需要...
本篇将详细讲解如何使用DOM解析器在Android中解析XML文件。 首先,我们需要了解DOM解析的基本概念。DOM(Document Object Model)解析方法会将整个XML文档加载到内存中,形成一个树形结构,允许开发者通过API遍历和...
在Android中,有两种主要的XML解析方式:DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析器会将整个XML文档加载到内存中,形成一个树形结构,适合小型XML文件;而SAX解析器则采用事件驱动模型,...
SAX(Simple API for XML)是一种事件驱动的解析器,它不像DOM解析器那样将整个XML文档加载到内存中,而是逐行读取,因此在处理大型XML文件时更加高效。 首先,我们需要了解SAX解析的基本流程。SAX解析器在读取XML...
Android XML 数据解析是Android开发中常见的一种数据处理方式,它主要用于读取和处理XML格式的配置文件或数据传输。XML(eXtensible Markup Language)是一种结构化数据表示语言,适用于存储和交换数据。在Android中...
在这个主题中,我们将深入探讨如何在Android环境中使用Dom4J库来解析XML文件。 首先,我们需要了解XML的基本结构。XML(eXtensible Markup Language)是一种标记语言,通过标签(Tags)定义元素(Elements),元素...
2. 加载XML:在代码中打开`books.xml`,使用选择的解析器解析文件。 3. 解析数据:根据解析器类型,处理解析过程中触发的事件或遍历DOM树,提取书籍的ID、名称和价格。 4. 显示数据:将解析出的书籍信息绑定到UI组件...
XML Pull解析是一种事件驱动的解析方式,它不像DOM解析那样一次性加载整个XML文档到内存中,而是通过迭代的方式逐个读取XML元素。这种方式降低了内存消耗,适用于处理大型XML文档。 二、XML Pull解析器 在Android...
这种方式对比DOM解析(将整个XML文档加载到内存中形成一棵树)更节省内存。 在Android中,SAX解析步骤通常包括以下几步: 1. **创建解析器**:使用`SAXParserFactory`的`newInstance()`方法创建一个解析器工厂对象...