读书人

Android -施用DOM(文档对象模型)解析

发布时间: 2012-11-25 11:44:31 作者: rapoo

Android -使用DOM(文档对象模型)解析XML文件

Android -使用DOM(文档对象模型)解析XML文件

1. 介绍

DOM—ocument Object Model)是一种用于XML文档的对象模型,可用于直接访问XML文档的各个部分。在DOM中,文档被模拟为树状,其中XML语法的每个组成部分(例如元素或文本内容)都被表示为一个节点。作为一种API,DOM允许用户遍历文档树,从父节点移动到子节点和兄弟节点等,并利用某种节点类型特有的属性(元素具有属性,而文本具有文本数据)。DOM被设计为与语言无关。OMG(object Management Group,对象管理组)的CORBA interface Definition Language 可用于表示DOM节点和支持接口。通常,DOM比SAX更容易掌握,因为它没有设计回调和复杂的状态管理。然而,DOM的实现常常将所有XML节点保存在内存中,这使处理较大的文档变得效率低下。

下面解析一段xml文件:version.xml

<update><version>2</version><name>baidunews_v100.apk</name><url>http://softdl1.tech.qq.com/soft/92/baidunews_v100.apk</url></update>


Android -施用DOM(文档对象模型)解析XML文件

2. 节点 (xml文档中的每个成分都是一个节点)

DOM是这样规定的:

(1)整个文档时一个文档节点

(2)每个XML标签是一个元素节点

(3)包含在XML元素中的文本时文本节点。

(4)每一个XML属性是一个属性节点

(5)注释属于注释节点

在上图中,根节点是<update>.文档的其他节点都被包含在<update>中。

3. DOM基本的节点类型

Node-DOM基本的数据类型

Element-最主要处理的对象是Element

Attr-代表一个元素的属性

Text-一个Element或Attr的实际内容。

Document-代表整个XML文档,一个Document对象通常也被称为一棵DOM树

4. 常犯错误:文本存储在哪里?

元素节点的文本时放在TextNode中的。可以说<version>有一个TextNodee,它的值是2,而不可以说<version>元素的值是2

5.等级关系

在节点树中,顶端的节点成为根节点。

根节点之外的每个节点都有一个父节点。

节点可以有任何数量的子节点;

叶子是没有子节点的节点。

同级及节点是拥有父节点的节点。

6. DOM常用方法

Document.getDocumentElement():返回文档的根(root)元素。

Node.getNextSibling() and Node.getPreviousSibling():这些方法返回下一个或前一个给定Node的同胞。

Node.getFirstChild() and Node.getLastChild():返回给定Node的第一个子女。

Node.getAttribute(attrName):对给定的Node返回给定名称的属性。

实例:

public class ParseXmlService{public HashMap<String, String> parseXml(InputStream inStream) throws Exception{HashMap<String, String> hashMap = new HashMap<String, String>();// 实例化一个文档构建器工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();// 通过文档构建器工厂获取一个文档构建器DocumentBuilder builder = factory.newDocumentBuilder();// 通过文档通过文档构建器构建一个文档实例Document document = builder.parse(inStream);//获取XML文件根节点Element root = document.getDocumentElement();//获得所有子节点NodeList childNodes = root.getChildNodes();for (int j = 0; j < childNodes.getLength(); j++){//遍历子节点Node childNode = (Node) childNodes.item(j);if (childNode.getNodeType() == Node.ELEMENT_NODE){Element childElement = (Element) childNode;//版本号if ("version".equals(childElement.getNodeName())){hashMap.put("version",childElement.getFirstChild().getNodeValue());}//软件名称else if (("name".equals(childElement.getNodeName()))){hashMap.put("name",childElement.getFirstChild().getNodeValue());}//下载地址else if (("url".equals(childElement.getNodeName()))){hashMap.put("url",childElement.getFirstChild().getNodeValue());}}}return hashMap;}}


读书人网 >XML SOAP

热点推荐