- 浏览: 559075 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
北月与南安:
哥哥不要秀我,答案是11.38,你算出来36.43,要求N个点 ...
平均距离 -
xiao_android_jun:
[color=red][ size=xx-small ...
Android 之 进程的概念介绍 -
明子健:
小伙子,很有前途哦
《将博客搬至CSDN》 -
1140566087:
dugujiujian 写道R.layout.simple_s ...
Android 之 下拉(Spinner) 组件示例 -
dugujiujian:
R.layout.simple_spinner_dropdow ...
Android 之 下拉(Spinner) 组件示例
DOM 解析 xml 格式的文件
1、 xml简介:xml实质是一个文本文件,能够用于存储数据,但应用程序却不能
直接的访问和操作。因此要操作xml文件,需要一个不仅能读懂xml文档而且能
提供相应的xml应用程序借口的xml解析器。
2、 常用的xml应用程序接口有两个:
a、DOM文档对象模型;核心:在内存中建立和xml文件相对应的树形结构数据。
b、SAX 简单应用程序接口:核心:事件处理机制。
3、 DOM的优缺点:
优点:一个应用程序可以方便的操作内存中树的节点来处理xml文档,获取自己需要的数据;
缺点:如果xml文档比较大,相应的document对象就要占用较多的内存空间;而且,应用程序可能不需要所有的数据,而只是部分的数据,为了部分数据却付出较大的空间代价。
4、 SAX 的优势:
SAX 不在内存中建立树形结构数据,占用内存空间较少,对于许多的应用程序,使用SAX解析器来获取xml数据效率较高;
5、 DOM 的核心:
DOM 的核心概念就是节点。DOM 在分析XML 文档时,将组成xml文档的各部分(元素、属性、文本、注释、处理指令等)映射为一个个对象,每个对象就叫节点。
6、 DOM 的本质是:节点的集合。
7、 常用的节点类型:文档、元素、属性;
不常用的节点类型:注释、处理指令、文档类型、CDATA段、文档片段、实体、实体引用、记号。
8、 DOM 节点类型:
文档节点:文档节点的根节点,也是文档中其它所有节点的父节点。注意:文档节点并不是xml文档的根元素,因为在xml文档中,处理指令、注释等内容可以出现在根元素之外,所有在构造DOM 树时,根元素并不适合作为根节点,于是就有了文档节点,而根元素则作为文档节点的子节点。在DOM API 中文档节点是通过org.w3c.dom.Document接口表示的。
元素节点:组成文档树的重要部分,表示了xml文档中的元素。通常元素拥有子元素、文本节点,或者两者的组合。元素节点也是唯一能够拥有属性的节点类型。在DOM API 中文档节点是通过org.w3c.com.Element接口表示的。
文本节点:只包含文本内容(在xml中成为字符串数据)的节点,可以油更多信息组成,也可以只包含空白。在文档树中,元素和属性的文本内容是由文本节点来表示的。通过 org.w3c.dom.Text 接口表示;
提示:文本节点可以只包含空白,因此如果元素的内容中包含空白,那么该元素节点的子节点中,也将包含空白组成的文本节点。
属性节点:代表了元素中的熟悉那个。文档中使用org.w3c.dom.Attr 接口表示的。因为属性实际上是附属于元素的,所有属性节点不能被看作是元素的子节点,因而在DOM 中属性没有被认为是文档树的一部分,在属性节点上调用getPatentNode() 、 getPreviousSibling() 和 getNextSibling() 返回的都是null。换句话说,属性节点其实是被看作包含它的元素节点的一部分,并不作为一个单独的节点在文档树中出现。
注释节点:表示注释内容, 使用 org.w3c.dom.Comment接口表示;
处理指令节点:表示xml文档中的处理指令。通过org.w3c.dom.ProcessingInstruction接口表示;
DocumentType节点:在DOM API 中文档类型节点都是通过org.w3c.dom.DocumentType接口表示的,每一个Document都有一个doctype属性,其值是null或者是DocumentType对象。
CADATA段节点:表示xml文档中的CDATA段; org.w3c.dom.CDATASection接口表示;
实体节点:表示一个在xml文档中已分析的或未分析的实体。 表示:... Entity
实体引用节点:被用于表示DOM树中的一个实体引用; 表示:... EntityReference
记号节点:表示了在DTD中声明的记号。 表示: ... Notation接口表示;
9、 DOM 对象接口:
DOM 的规范中,有四个基本的接口:Document , Node , NodeList , NamedNodeMap;
Document接口:对文档进行操作的入口,集成与Node接口。(Node接口是大多数接口的父类:Document/Element/Attribute/Text/Comment等接口);
NodeList 接口:节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点;该接口提供了一个有序节点集合的抽象,使用:
Int getLength() 可以得到列表中节点的数目;
Node item(int index); 返回集合中执行索引的节点,从 0 开始;
提示:NodeList的对象是“Live”的,对文档的改变,会直接反映到相关的NodeList对象中;
10、 创建 DOM 解析器的步骤:
在JAXP(Java API for XML Parsing )DOM 解析器是DocumentBuilder类的一个实例。
第一步:创建DocumentBuilderFactory对象:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
第二步:创建DocumentBuilder 对象:
DocumentBuilder builder = factory.newDocumentBuilder();
第三步:指定要解析的文件:
Document document = builder.parse(new File("xx.xml"));
11、 具体代码实现如下:
案例一:利用DOM 创建xml文档
import java.io.File; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.crimson.tree.XmlDocument; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Text; /** * DOM 解析器实际应用 * @author Administrator * */ public class DOMTest { /** * 使用DOM 解析器创建xml文件 */ public void domCreate() throws Exception{ // 1、 创建DocumentBuilderFactory对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 2、创建DocumentBuilder 对象解析器 DocumentBuilder parse = factory.newDocumentBuilder(); // 3、创建文档Document Document doc = parse.newDocument(); // 创建文档节点 // 4、创建根元素 Element root = doc.createElement("students"); // 根元素节点 // 5、创建第一个子元素 Element stu1 = doc.createElement("student"); stu1.setAttribute("sno","11"); // 为student元素设置属性 Element name1 = doc.createElement("name"); Text name1value = doc.createTextNode("mike"); name1.appendChild(name1value); stu1.appendChild(name1); // 将 name1 这个元素添加为 stu1 的子元素 Element age1 = doc.createElement("age"); Text age1value = doc.createTextNode("12"); age1.appendChild(age1value); // 将age1value 文本节点添加到 age 元素中 stu1.appendChild(age1); // age 添加为student的子元素 root.appendChild(stu1); // 将 student 添加为 students 的子元素 // 创建保存数据的文件 File file = new File("stu.xml"); // 默认路径,工程的根目录 FileOutputStream fos = new FileOutputStream(file); // 输出流,写文件 // import org.apache.crimson.tree.XmlDocument; // jar包:crimson.jar ((XmlDocument)doc).write(fos); // 写文件 } /** * 利用 DOM 修改xml文档 */ public void domUpdate() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder parse = factory.newDocumentBuilder(); Document doc = parse.parse("stu.xml"); // 增加一个子元素 Element stu3 = doc.createElement("student"); stu3.setAttribute("sno","111"); Element name3 = doc.createElement("name"); Text name3value = doc.createTextNode("tom"); name3.appendChild(name3value); stu3.appendChild(name3); // 年龄 Element age3 = doc.createElement("age"); // 创建 age 标记 Text age3value = doc.createTextNode("34"); age3.appendChild(age3value); stu3.appendChild(age3); Element root = doc.getDocumentElement(); root.appendChild(stu3); // 重写写入修改的文件 File file = new File("stu1.xml"); FileOutputStream fos = new FileOutputStream(file); ((XmlDocument)doc).write(fos); } }
案例解析:
import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import android.util.Log; /** * DOM 解析 XML 文档,得到具体的数据 * * @author Administrator * */ public class DOMParseService { /** * 对XML 文件进行解析,返回数据集合 * * @param is * 文档流( 需要被解析的资源 ) */ public static void doParse(InputStream is) throws Exception { // 1、创建DocumentBuilderFactory工厂对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 2、创建解析器 DocumentBuilder 对象 DocumentBuilder db = factory.newDocumentBuilder(); // 3、创建文档对象 , 根据文件流地址 Document document = db.parse(is); // 4、获取文档的根元素节点 , root 节点 Element root = document.getDocumentElement(); // 5、获取根元素的子元素 , "元素标签为 stu 的子元素" NodeList nodeList = root.getElementsByTagName("stu"); // 6、读取每一个子元素,获取对应的信息 for (int i = 0; i < nodeList.getLength(); i++) { Element student = (Element) nodeList.item(i); // 得到一个子元素 /* 对应元素 ID 属性 */ String sno = student.getAttribute("sno"); NodeList child = student.getChildNodes(); // 获取所有孩子节点 Log.i("msg", "孩子节点数量:" + child.getLength()); for (int j = 0; j < child.getLength(); j++) { if (child.item(j).getNodeType() == Node.ELEMENT_NODE) { // 如果为元素节点 if (child.item(j).getNodeName().equals("name")) { // 节点为name // name 节点下为文本节点,获取值为获取第一个文本节点 String name = child.item(j).getFirstChild().getNodeValue(); } else if (child.item(j).getNodeName().equals("age")) { String age = child.item(j).getFirstChild().getNodeValue(); } } //Log.i("msg", "第"+j+"个孩子节点为:"+child.item(j).getNodeName()+",值为:"+child.item(j).getFirstChild().getNodeValue()); } } } }
发表评论
-
Android 之 网络访问服务器,解析JSON数据
2014-03-28 22:50 3414提示:在访问网络,或者服务器的数据一定要注意 网络权限的声明: ... -
Android 之 AsyncTask 异步任务
2014-03-20 08:44 3522Android ... -
Android 之 Looper Handler Message 之间的关系
2014-03-19 10:16 3665Android 的消息 ... -
Android 之 多线程与Socket联合使用案例
2014-03-19 10:15 2673多线 ... -
Android 之 多线程和Socket套接字的使用介绍
2014-03-19 10:15 4883And ... -
Android 之 实现Runnable 接口与继承Thread的区别
2014-03-19 10:15 2198实现Runnable 接口 相 ... -
Android 之 GSON解析JSON数据
2014-03-19 10:14 4490... -
Android 之 使用Pull 解析xml文件
2014-03-18 21:04 1045/** * 使用Pull进行 xml 文件的解析 ... -
Android 之 百度API 密钥安全码生成
2014-03-04 22:29 2413近期要做个关于旅游助手的应用,开始接触百度API了。大神们 ... -
Android 之 EditText属性用法介绍
2014-01-06 23:49 3990EditText的属性 EditText继承关系:View-- ... -
Android 之 自定义适配器
2014-01-08 10:40 1773自定义适配器 1、实现 * 自定义适配器要继承 BaseA ... -
Android 之 自定义控件用法介绍
2014-01-08 10:40 1719自定义效果:实现:图片和文字混合 首先创建需要组合的子布局: ... -
Android 之 资源自适应与国际化
2014-01-08 10:40 3080<!-- 国际化和资源自适应 ... -
Android 之 Parcelable 序列化
2014-01-08 10:41 2698/* 序列化 * * 作 ... -
Android 之 五大布局案例
2014-01-08 10:41 21331、LinearLayout 线性布局例子: <Lin ... -
Android 之 通知Notification
2014-03-03 22:30 3897Notification 和 NotificationMana ... -
Android 之 手机全屏显示
2014-03-03 22:30 2344/* 1、全屏状态的显示 介绍:Android 中提供了Wi ... -
Android 之 拦截手机短信并自动转发
2014-03-03 22:29 5436拦截短信和发送短信都需要相关的权限: <?xml ve ... -
Android 之 将RAW资源文件写入SD卡工具类
2014-03-01 10:09 3614package com.sun.coptfiletosd; ... -
Android 之 监控手机电量
2014-03-01 10:09 1795package com.example.battery; ...
相关推荐
下面将详细介绍在Android中使用DOM解析XML的基本步骤和关键知识点。 1. **导入XML解析库** 在Android项目中,我们不需要额外导入库,因为DOM解析器是Java标准库的一部分,已经包含在Android SDK中。这意味着你可以...
在Android中,我们通常使用`javax.xml.parsers.DocumentBuilderFactory`来创建解析器,并通过`DocumentBuilder`实例解析XML文件。下面是一个简单的示例: ```java DocumentBuilderFactory factory = ...
本篇文章将深入探讨Android中的DOM解析XML文件,包括其基本原理、实现步骤和一些实用技巧。 ### 1. DOM解析的基本概念 DOM解析是一种将XML文件转换为内存中对象模型的方法。它将XML文档视为一棵树,其中每个元素、...
本篇文章将深入探讨如何使用DOM(文档对象模型)解析XML文件,并将其内容显示在应用程序的用户界面上。 首先,理解DOM解析的基本概念至关重要。DOM是一种标准,允许程序以树形结构访问和操作XML文档的全部内容。它...
本篇文章将深入探讨DOM解析XML文件在Android中的应用实例。 首先,DOM解析的基本思想是将整个XML文件加载到内存中,形成一个树形结构,即DOM树。这样做的优点是解析后的数据可以方便地进行任意位置的查找和修改,但...
Java 使用 DOM 解析 XML 是一种常见的处理 XML 文档的方式,DOM 即 Document Object Model,它是一种 W3C 标准的 API,用于处理 XML 和 HTML 文档。在 Java 中,DOM 解析允许开发者将整个 XML 文件加载到内存中,...
使用DOM解析XML的基本步骤如下: 1. 加载XML文件:使用`DocumentBuilderFactory`创建`DocumentBuilder`,然后调用`parse()`方法加载XML。 2. 构建DOM树:`DocumentBuilder`会将XML转换为`Document`对象。 3. 遍历DOM...
二、DOM解析XML文件 DOM(Document Object Model)将整个XML文档加载到内存中,形成一棵树形结构,方便遍历和操作。对于小规模的XML文件,DOM解析器是一个不错的选择。Java和Kotlin的DOM解析步骤如下: 1. 加载XML...
本教程将详细介绍如何在Android环境下解析XML文件,以"ReadXMLDemo"为例,展示具体步骤和关键知识点。 首先,XML(eXtensible Markup Language)是一种自定义标记语言,它的结构清晰,易于读写,适合于数据交换和...
- **解析XML文件**:然后,使用`DocumentBuilder`解析XML文件,得到`Document`对象,表示整个XML文档。 ```java File xmlFile = new File("path_to_xml_file"); Document document = builder.parse(xmlFile); `...
在提供的代码示例中,展示了如何使用DOM解析XML文件`library.xml`。首先,通过`DocumentBuilderFactory`创建解析器,然后解析文件,得到`Document`对象。接着,获取根元素`books`,并通过`getChildNodes()`遍历所有...
在提供的`DomXmlOperate`示例中,可能包含了如何使用DOM解析XML并绑定到View(如使用ButterKnife库)的代码。 2. PULL解析: PULL解析器是事件驱动的,它以拉取(pull)的方式逐个处理XML元素,不需要一次性加载...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,特别是在移动应用开发,如Android中,解析XML文件是常见的任务。本篇将详细讲解Android中三种主要的XML解析方式:SAX(Simple API for XML)...
本文实例讲述了Android中DOM解析xml文件的方法。分享给大家供大家参考,具体如下: 一、在assets文件中写xml文件 <?xml version=1.0 encoding=UTF-8?> 李明 <age>30 李向梅 <age>25 二、在...
总的来说,DOM解析方式在Android中适用于小型或中型XML文件,因为它将整个XML加载到内存,可以快速访问任何节点,但不适合处理大型XML文件。对于大型文件,更推荐使用SAX(Simple API for XML)或Pull解析器,它们以...
本节将深入探讨Android版本更新的过程以及DOM解析XML的技术。 一、Android版本更新 1. 版本跟进:Android系统经历了从早期的API Level 1到目前的API Level 30等多个版本。每个新版本通常包含对性能、安全性和用户...
这个简单的示例展示了如何使用DOM解析XML文件并获取其中的数据。在实际应用中,我们还可以结合XPath表达式来更精确地定位和提取XML数据。不过,对于大型XML文件,可能需要考虑使用SAX(Simple API for XML)或者StAX...
使用DOM解析XML文件的步骤包括: 1. 加载XML文件:使用`DocumentBuilderFactory`创建`DocumentBuilder`对象,然后调用`parse()`方法加载XML。 2. 获取根节点:使用`Document`对象的`getDocumentElement()`方法获取...
本文将深入探讨如何在Android中使用PULL解析器(Pull Parser)来解析XML文档,这是一种轻量级且高效的解析方式。 **PULL解析器概述** PULL解析器(Pull Parsing)是一种事件驱动的解析模型,它不需要完整的XML文档...
本篇文章将深入探讨三种在Android中解析XML的方法:DOM(文档对象模型)、Pull(拉取解析器)和SAX(简单API for XML),并且会特别强调如何识别文件编码。 首先,DOM解析是将整个XML文件加载到内存中形成一个树形...