`

DOM方式解析xml文件3(assets中xml文件)

阅读更多
这个例子是进一步熟悉DOM解析xml文件的方法,附带基础的文档说明,大部分内容来自于EOE论坛的帖子消息:
先直接上代码:
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文件中提取出数据了,我们就可以把这些
数据用在合适的地方,来构筑应用程序
分享到:
评论

相关推荐

    Android使用DOM方式解析XML

    Android提供了多种方式来读取XML资源,包括从assets目录、res/raw目录或网络中加载。这里我们假设XML文件已经存储在项目的assets目录下,名为“myxml.xml”。 ```java InputStream inputStream = context.getAssets...

    Android Dom解析XML

    DOM解析方式允许开发者一次性加载整个XML文档到内存中,形成一个树形结构,便于遍历和操作。尽管对于大型XML文件,DOM解析可能因消耗大量内存而效率低下,但在处理小型XML文件时,DOM方法具有简洁和方便的优点。 ...

    android 三种方式解析XML(DOM,Pull,Sax) 带文件编码识别

    在实际应用中,如果XML文件较小,DOM解析可能是个好选择,因为其提供了一种直观的节点遍历方式。而大型XML文件更适合用Pull或SAX解析,以减少内存消耗。根据具体需求,开发者可以灵活选择解析方式。 在提供的压缩包...

    android解析xml文件的方式[参照].pdf

    本节将详细介绍Android中使用DOM方式解析XML文件的方法,并通过一个示例来阐述整个过程。 DOM(Document Object Model)解析器是一种将XML文档转换为树形结构的模型,它允许开发者通过遍历这棵树来访问和修改XML...

    Android 创建与解析XML Dom方式

    本文将详细介绍如何使用DOM(Document Object Model)方式在Android中创建和解析XML文件。DOM是一种将XML文档映射为一棵树形结构的模型,允许开发者通过节点操作来处理XML数据。 首先,我们需要了解DOM解析的基本...

    android解析xml文件的方式.pdf

    以下是如何在Android中使用DOM解析XML文件的基本步骤: 1. 引入必要的库: 在Java代码中,需要导入`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`等相关类库。 2. 创建...

    android xml 的解析 sax dom pull 解析

    总结,Android中XML解析的三种方式各有优缺点:SAX适合大文件,低内存占用;DOM适合灵活操作,但内存需求大;PULL结合了两者优点,既高效又易于使用。根据实际项目需求和资源限制,开发者可以选择最适合的XML解析...

    Android解析xml文件

    以上代码展示了如何使用DOM解析XML文件,并将其数据存储在自定义的Java对象中。虽然DOM解析在处理大型XML文件时效率较低,但它的简单性和易于使用使其成为许多小型应用的首选。在处理大量数据或内存有限的场景下,...

    android解析xml文件的方式

    DOM(Document Object Model)解析器将整个XML文件加载到内存中,形成一个树形结构,允许开发者通过API遍历整个文档。虽然DOM解析提供了方便的访问机制,但它的缺点在于,如果XML文件较大,会占用大量内存,对性能...

    Android开发之DOM解析xml文件的方法

    本文实例讲述了Android中DOM解析xml文件的方法。分享给大家供大家参考,具体如下: 一、在assets文件中写xml文件 &lt;?xml version=1.0 encoding=UTF-8?&gt; 李明 &lt;age&gt;30 李向梅 &lt;age&gt;25 二、在...

    android Pull XML文件解析 存取 代码程序

    它的核心类是`org.xmlpull.v1.XmlPullParser`,它提供了一种迭代的方式解析XML,通过不断调用`next()`方法来获取下一个XML事件,如开始标签、结束标签、文本等。 三、Pull解析器的基本使用 1. 创建解析器:首先需要...

    android解析XML文件.doc

    本篇将详细讲解如何使用DOM解析器在Android中解析XML文件。 首先,我们需要了解DOM解析的基本概念。DOM(Document Object Model)解析方法会将整个XML文档加载到内存中,形成一个树形结构,允许开发者通过API遍历和...

    Android ReadXmlByPull 使用Pull解析Xml文件.zip

    在Android中,有两种主要的XML解析方式:DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析器会将整个XML文档加载到内存中,形成一个树形结构,适合小型XML文件;而SAX解析器则采用事件驱动模型,...

    android开发之xml文件操作——SAX

    SAX(Simple API for XML)是一种事件驱动的解析器,它不像DOM解析器那样将整个XML文档加载到内存中,而是逐行读取,因此在处理大型XML文件时更加高效。 首先,我们需要了解SAX解析的基本流程。SAX解析器在读取XML...

    Android XML数据的三种解析方式

    Android XML 数据解析是Android开发中常见的一种数据处理方式,它主要用于读取和处理XML格式的配置文件或数据传输。XML(eXtensible Markup Language)是一种结构化数据表示语言,适用于存储和交换数据。在Android中...

    androidDom4J解析xml

    在这个主题中,我们将深入探讨如何在Android环境中使用Dom4J库来解析XML文件。 首先,我们需要了解XML的基本结构。XML(eXtensible Markup Language)是一种标记语言,通过标签(Tags)定义元素(Elements),元素...

    Android-XML解析技术(共23张PPT).ppt

    2. 加载XML:在代码中打开`books.xml`,使用选择的解析器解析文件。 3. 解析数据:根据解析器类型,处理解析过程中触发的事件或遍历DOM树,提取书籍的ID、名称和价格。 4. 显示数据:将解析出的书籍信息绑定到UI组件...

    android 安卓xml pull解析

    XML Pull解析是一种事件驱动的解析方式,它不像DOM解析那样一次性加载整个XML文档到内存中,而是通过迭代的方式逐个读取XML元素。这种方式降低了内存消耗,适用于处理大型XML文档。 二、XML Pull解析器 在Android...

    android----xml Sax解析示例

    这种方式对比DOM解析(将整个XML文档加载到内存中形成一棵树)更节省内存。 在Android中,SAX解析步骤通常包括以下几步: 1. **创建解析器**:使用`SAXParserFactory`的`newInstance()`方法创建一个解析器工厂对象...

Global site tag (gtag.js) - Google Analytics