在解析 XML 文档时,通常是利用现有的 XML 解析器软件对 XML 文档进行分析,而应用程序则通过解析器提供的 API 接口得到 XML 数据。目前几乎所有的解析器都对两套标准的 API 提供了支持,他们是 DOM 和 SAX 。
今天在传智播客的课堂上,我们学习了如何用 DOM 来解析 XML 文件,以下是我的总结。
--------------------------------------------------------------------------------
1. DOM 概述:
<1> DOM 是独立于程序语言的, W3C 组织以 IDL(Interface Definition Language, 接口定义语言) 的形式定义了 DOM 中的接口。
<2> 某种程序语言要实现DOM,需要将 DOM 接口转换为本语言中的对应结构。
--------------------------------------------------------------------------------
2. DOM 结构模型:
<1> DOM 中的核心概念是节点。 DOM 在解析 XML 文档时,将组成 XML 文档的各个部分(元素,属性,文本等)映射为一个对象,这个对象就是一个节点。
<2> 在内存中,这些节点形成一棵文档树。整棵树也是一个节点,树中的每一个子节点也是一棵树(子树)。
<3> DOM 就是对一棵树的一个对象表示,通过访问树中的节点来存取 XML 文档的内容。
<4> DOM 定义了一个 Node 接口,用于表示文档树中的一个节点。从这个接口派生处更多的具体的接口:表示整个文档的 Document 对象,表示 XML 文档中元素的 Element 接口,表示属性元素的 Attr 接口等。
--------------------------------------------------------------------------------
3. DOM 中的节点类型:
XML 中最常见的节点类型是:文档,元素,文本和属性,在 DOM API 中对应的接口是: Document, Element, Text 和 Attr。
<1> 文档节点:
a. 文档节点是文档树的根节点,也是文档中其他所有节点的父节点。
b. 文档节点并不是 XML 文档的根元素,因为在 XML 文档中,处理指令,注释等内容可以出现在根节点之外,所以在构造 DOM 树时,根元素并不适合作为根节点,而作为文档节点的子节点。
c. 在 DOM API 中根节点是通过 org.w3c.dom.Document 接口来表示的。
d. 为了得到 XML 文档的根元素, 在 Document 接口中可以调用如下方法: Element getDocumentElement();
<2> 元素节点:
a. 元素节点表示了 XML 文档中的元素。
b. 元素拥有子元素,文本节点或两者的组合。
c. 元素节点也是唯一能够拥有属性的节点类型。
d. 在 DOM API 中,元素节点是通过 org.w3c.dom.Element 接口定义的。
<3> 文本节点:
a. 文本节点是只包含文本内容的节点,也可以只包含空白。
b. 在文档树中,元素和属性的文本内容都是由文本节点来表示的。
c. 在 DOM API 中,文本节点是由 org.w3c.dom.Text 接口来表示的。
<4> 属性节点:
a. 属性节点代表了元素中的属性。
b. 在 DOM API 中,属性节点通过 org.w3c.dom.Attr 接口来表示。
c. 因为属性实际上是附属于元素的,所以属性节点不是元素的子节点,而不作为单独的节点在文档树中出现。
--------------------------------------------------------------------------------
4. DOM 解析 XML 文档的步骤:
<1> 调用 DocumentBuilderFactory.newInstance() 方法得到 DOM 解析器工厂类实例。
<2> 调用解析器工厂实例类的 newDocumentBuilder() 方法得到 DOM 解析器对象。
<3> 调用 DOM 解析器对象的 parse() 方法解析 XML 文档得到代表整个文档的 Document 对象。
--------------------------------------------------------------------------------
5. 以下是用 DOM 解析一个 XML 文档的代码示例:
<1> XML 文档中的内容如下:
<?xml version="1.0" encoding="GB2312"?>
<china>
<province name="河北省">
<city>石家庄</city>
<city>邯郸</city>
<city>唐山</city>
<city>张家口</city>
<city>廊坊</city>
</province>
<province name="辽宁省">
<city>沈阳</city>
<city>大连</city>
<city>鞍山</city>
<city>抚顺</city>
<city>铁岭</city>
</province>
<province name="山东省">
<city>济南</city>
<city>青岛</city>
<city>威海</city>
<city>烟台</city>
<city>潍坊</city>
</province>
</china>
<2> 下面是解析的过程:
//1. 得到 DocumentBuilderFactory 对象, 由该对象可以得到 DocumentBuilder 对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2. 得到 DocumentBuilder 对象, 由该对象可以得到 Document 对象
DocumentBuilder db = dbf.newDocumentBuilder();
//3. 得到代表整个 xml 文档的 Document 对象
Document doc = db.parse(new FileInputStream("cities.xml"));
//4. 得到 "根节点" 既 Document 对象的第一个子节点(最后一个子节点)
Node rootNode = doc.getFirstChild();
//5. 把 4 得到的 Node 强转为 Element 类型
Element rootElement = (Element) rootNode;
System.out.println("<" + rootElement.getNodeName() + ">");
//6. 得到 "根节点" 的所有 province 子节点
NodeList provinceNodes = rootElement.getElementsByTagName_r("province");
//7. 对 6 得到的 NodeList 进行遍历
for(int i = 0; i < provinceNodes.getLength(); i++){
//7.1 把遍历后的每一个元素强转成 Element 类型
Element provinceElement = (Element) provinceNodes.item(i);
//7.2 得到 7.1 得到的 节点的 name 属性节点
Attr nameAttr = provinceElement.getAttributeNode("name");
System.out.println("\t<" + provinceElement.getNodeName() +
" " +
nameAttr.getNodeName() + "=" + nameAttr.getNodeValue() +
">");
//7.3 得到 7.1 节点的所有 "city" 子节点
NodeList cityNodes = provinceElement.getElementsByTagName_r("city");
for(int j = 0; j < cityNodes.getLength(); j++){
Element cityElement = (Element) cityNodes.item(j);
System.out.println("\t\t<" + cityElement.getNodeName() + ">" +
cityElement.getFirstChild().getNodeValue() +
"</" + cityElement.getNodeName() + ">");
}
System.out.println("\t</" + provinceElement.getNodeName() + ">");
}
System.out.println("</" + rootElement.getNodeName() + ">");
}
本文章转载自http://blog.sina.com.cn/s/blog_5de48f8b0100daso.html
分享到:
相关推荐
使用DOM解析XML文件的步骤如下: 1. 加载XML文件:首先,你需要创建一个`DocumentBuilderFactory`对象,然后通过`newDocumentBuilder()`方法得到一个`DocumentBuilder`实例。接着,调用`parse()`方法,传入XML文件...
在这个例子中,我们将深入探讨如何使用DOM解析XML文件,以理解和掌握XML文档的结构,并进行数据提取、修改和创建。 首先,XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据,具有自描述性和...
本篇文章将深入探讨DOM解析XML文件在Android中的应用实例。 首先,DOM解析的基本思想是将整个XML文件加载到内存中,形成一个树形结构,即DOM树。这样做的优点是解析后的数据可以方便地进行任意位置的查找和修改,但...
本篇文章将深入探讨Android中的DOM解析XML文件,包括其基本原理、实现步骤和一些实用技巧。 ### 1. DOM解析的基本概念 DOM解析是一种将XML文件转换为内存中对象模型的方法。它将XML文档视为一棵树,其中每个元素、...
在压缩包文件"复件 dom"中,可能包含了示例代码或教程,用于演示如何使用DOM4J和本地DOM解析XML文件。通过查看这些文件,你可以更深入地了解两种方法的具体实现,并在实际项目中选择合适的方式处理XML数据。 总结来...
以一个实例来说明DOM解析XML文件的方法与过程。
本项目"DOM解析XML文件并实现通讯录"就是利用DOM解析器来处理XML数据,构建一个简单的通讯录应用。 首先,我们需要理解DOM解析的基本流程。当读取一个XML文件时,DOM解析器会一次性加载整个文件到内存中,然后创建...
### DOM解析XML文件知识点 #### 一、DOM (Document Object Model) 概念 DOM(文档对象模型)是一种处理可扩展标记语言的标准方法。它提供了一组标准的对象接口,允许程序和脚本动态地访问和更新文档的内容、结构和...
在"ParseXml"这个压缩包中,可能包含了示例代码,演示了如何使用JDOM、DOM4J和DOM解析XML文件。通过阅读和理解这些代码,你可以更好地掌握这些库的用法,提升处理XML文件的能力。记得实践是检验理论的最好方式,尝试...
使用DOM解析XML的基本步骤如下: 1. **导入必要的库**:在Java中,DOM解析功能主要由`javax.xml.parsers`和`org.w3c.dom`包提供。因此,首先需要在代码中导入这些库: ```java import javax.xml.parsers....
以下是一个使用Java DOM解析XML文件的示例代码片段: ```java import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml....
JAVA DOM 解析 XML 文件过程详解 JAVA DOM 解析 XML 文件过程详解是指使用 JAVA 语言通过 DOM(Document Object Model)解析 XML 文件的过程。DOM 是一种应用程序接口(API),它将 XML 文档转换为一个树形结构,...
本文将深入探讨如何在Internet Explorer(IE)环境下利用XML Document Object Model (DOM) API来解析XML文件。DOM是一种标准的接口,允许程序和脚本创建、修改以及访问XML文档的结构。 首先,理解XML DOM是非常重要...
DOM解析XML文件的基本步骤如下: 1. 引入必要的库:在Android项目中,我们需要引入`javax.xml.parsers.DocumentBuilderFactory`和`javax.xml.parsers.DocumentBuilder`库,这些库提供了解析XML的工具。 2. 创建...
解析XML文件是处理XML数据的关键步骤,本篇将详细探讨两种常用的解析方式:SAX(Simple API for XML)和DOM(Document Object Model)。 **SAX解析技术** SAX解析器采用事件驱动模型,它不会一次性加载整个XML文档...
在提供的代码示例中,展示了如何使用DOM解析XML文件`library.xml`。首先,通过`DocumentBuilderFactory`创建解析器,然后解析文件,得到`Document`对象。接着,获取根元素`books`,并通过`getChildNodes()`遍历所有...
1. 加载XML:使用DOM解析器如Java的`DocumentBuilderFactory`创建`DocumentBuilder`,然后用它来解析XML文件,得到`Document`对象。 2. 获取根节点:`Document`对象的`getDocumentElement()`方法返回XML文档的根...
SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析...当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例
在Android中,我们通常使用`javax.xml.parsers.DocumentBuilderFactory`来创建解析器,并通过`DocumentBuilder`实例解析XML文件。下面是一个简单的示例: ```java DocumentBuilderFactory factory = ...
然而,在某些情况下,如离线环境或者网络连接不稳定的情况下,这种行为会导致DOM4J无法正确地解析XML文件,从而引发异常。 #### DTD的作用与工作原理 DTD是一种用于定义XML文档结构的语言。它定义了文档中元素的...