`
xiaogangedemon
  • 浏览: 11646 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

理解XML DOM树结构

阅读更多
一.引言
XML 是eXtensible Markup Language的缩写,它是一种可扩展性标识语言, 能够让你自己创造标识,标识你所表示的内容。DOM全称是Document Object Model(文档对象模型),定义了一组与平台和语言无关的接口,以便程序和脚本能够动态访问和修改XML文档内容、结构及样式。XML创建了标识,而 DOM的作用就是告诉程序如何操作和显示这些标识。
二.DOM树结构
实际上XML将数据组织成为一棵树,DOM通过解析XML文档,为XML文档在逻辑上建立一个树模型,树的节点是一个个的对象。这样通过操作这棵树和这些对象就可以完成对XML文档的操作,为处理文档的所有方面提供了一个完美的概念性框架。
如下XML文档:
<line id=”1”> the <bold>First</bold>line</line>
DOM的结构表示如下:

由于DOM“一切都是节点(everything-is-a-node)”,XML树的每个 Document、Element、Text 、Attr和Comment都是 DOM Node。
由上面例子可知, DOM 实质上是一些节点的集合。由于文档中可能包含有不同类型的信息,所以定义了几种不同类型的节点,如:Document、Element、Text、 Attr 、CDATASection、ProcessingInstruction、Notation 、EntityReference、Entity、DocumentType、DocumentFragment等。
在创建XML文件时,如定义如下的XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<!--this is an example-->
<student>
<name>
<first-name>Mike</first-name>
<last-name>Silver</last-name>
</name>
<sex>male</sex>
<class studentid="15">98211</class>
<birthday>
<day>3</day>
<month>3</month>
<year>1979</year>
</birthday>
</student>
<student>
<name>
<first-name>Ben</first-name>
<last-name>Silver</last-name>
</name>
<sex>male</sex>
<class studentid="16">98211</class>
<birthday>
<day>3</day>
<month>3</month>
<year>1980</year>
</birthday>
</student>
</students>
我们很自然想象到能得到如下图的结构,但是这只是数据的描述,而不是DOM树的结构。

我们可以通过以下的代码得到上面的XML文档的根结点和根结点下孩子节点的数目。
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.File;
import xmlwriter.XMLProperties;
public class Xml
{
public static void main(String args[])
{ try
{ File file=new File("links.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc=builder.parse(file);
doc.normalize();
Element theRoot = doc.getDocumentElement();
NodeList theList=theRoot.getChildNodes();
System.out.println("the students root has "+theList.getLength()+" children");
}
}
}
结果显示为:
但是从上面XML文档可以看出,students一共只有3个孩子节点(包括注释),但程序得到的结果确实有7个孩子结点。为什么呢?因为在DOM中节点和元素不是等价的,它的7个节点包括:两个student元素、注释及它们周围的文本节点。这些文本节点有可能是回车换行、空格或者退格,假如把这些回车换行、空格和退格都删除,那么DOM解释的时候就没有这些文本节点,孩子节点就真的只有3个了。下图是DOM树的精确描述:

三.常见的基本节点类型:文档、元素、属性、文本和注释
XML 中共有12种节点类型,其中最常见的节点类型有5种:
元素:元素是 XML 的基本组成单元。,描述XML的基本信息。
属性:属性节点包含关于元素节点的信息,通常包含在元素里面,描述元素的属性。
文本:包含许多文本信息或者只是空白。
文档:文档节点是整个文档中所有其它节点的父节点。
注释:注释是对相关的信息进行描述、注释。
四.常见的基本方法:
通过Jaxp包来解释XML文档后,对DOM的节点对象的基本操作有:
appendChild(Node newChild):在本节点上增加一个新的孩子到孩子列表的后面。
getAttributes():得到本节点的属性列表,返回类型为NamedNodeMap。
getChildNodes():得到本节点的孩子列表,返回类型为NodeList。
getFirstChild()、getLastChild():得到第一个和最后一个孩子节点。
getNextSibling()、getPreviousSibling():得到本节点的下一个和前一个兄弟节点。
getNodeName()、getNodeType()、getNodeValue():得到本节点的名称、类型和值。
getParentNode():得到本节点的父亲节点。
insertBefore(Node newChild, Node refChild):在本节点的refChild孩子节点前插入一个新的节点。
removeChild(Node oldChild):删除oldChild孩子节点。
以上列出对DOM树操作的一些常用的基本的方法,还有很多其他的方法,读者可以参考有关的规范。
五.递归遍历DOM树
DOM树结构和二叉树很相似,元素的孩子节点集合就是该元素的分支,但是属性节点不是元素的子节点,它只是描述该元素节点的一些性质而已,属于元素节点结构内部的一部分。以下是用java编写的一段遍历DOM的程序:
public class RecurDOM(NodeList nodelist)
{
Node node;
int i;
if(nodelist.getLength() == 0)
{
// 该节点没有子节点返回
return;
}
for(i=0;i<nodelist.getLength();i++)
{
node = nodelist.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE)
RecurDOM(node.getChildNodes());//递归调用
}
}
六.小结:
DOM 是一种在浏览器内编程的模型,同时也是XML的主要接口,它与语言和平台无关,它是基于树的 API,它把所有的数据以父子的节点层次结构装入内存构成一棵树,这些节点的类型可以是元素、文本、属性、注释或其它。它允许开发者读取、创建、删除和编辑 XML 数据。在这再次强调,DOM的“一切都是节点(everything-is-a-node)”。
本文的程序是用java编写的,使用Jaxp包来解释XML文档。本文的适用对象是理解 XML 基本概念并开始准备用DOM编写应用程序来操纵 XML文档 的开发者。

- 作者: crybaby2005 访问统计: 2005年10月11日, 星期二 16:43 加入博采
分享到:
评论

相关推荐

    xmldom.zip

    XMLDOM(XML Document Object Model)是处理XML文档的标准接口,它允许程序和脚本动态地访问和更新XML文档的内容、结构和样式。在微信小程序的开发过程中,由于小程序需要处理和解析XML数据,例如从服务器获取的数据...

    DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY 文档

    例如,你可以使用DBMS_XMLDOM.newDoc()来创建一个新的XML文档对象,使用DBMS_XMLDOM.parseXML()将XML字符串解析成DOM树,然后通过DBMS_XMLDOM.getElementsByTagName()等方法对DOM树进行查询和操作。 DBMS_XMLPARSER...

    Microsoft_XMLDOM帮助

    **Microsoft XML Document Object Model (XMLDOM)** XMLDOM是微软提供的一个接口,它允许程序员通过JavaScript、VBScript或其他...通过理解和掌握XMLDOM,开发者能够高效地操作XML文档,实现各种复杂的数据处理需求。

    【学习 XML DOM】.pdf

    DOM 将XML文档解析成一个树形结构,每个组成部分都称为一个节点。理解XML DOM对于有效地处理XML至关重要。 XML DOM 简介: XML DOM 提供了一种平台和语言中立的接口,允许开发者通过编程方式访问和修改XML文档的...

    XML应用开发(软件品牌)-1期 6.1 课堂实践-DOM树结构.doc

    在这个“XML应用开发”的课程中,我们专注于理解DOM树结构及其实践应用。 DOM树结构是解析XML文档的核心概念,它将XML文档视为一个由节点组成的树。在DOM中,每个XML元素、属性、文本、注释等都有对应的节点类型。...

    JAVA_XML-DOM的结构

    - **Document Node**: 这个节点代表整个XML文档,它是DOM树的根节点,包含所有其他节点。 - **Element Node**: 表示XML文档中的元素,可以通过`nodeName`获取元素的标签名,但其`nodeValue`通常为`null`,因为元素的...

    XMLDOM对象方法中文手册chm

    这个"XMLDOM对象方法中文手册chm"提供了关于XML DOM在中文环境下的详细指南,对于理解和应用XML DOM技术至关重要。 1. **XML DOM基本概念** - DOM是一种与平台和语言无关的接口,它将XML文档解析为一个树形结构,...

    使用递归和dom遍历dom树形结构

    在DOM树的情况下,递归非常适合用来遍历整个树结构,因为它可以深入到树的每一层,确保每个节点都被访问。 #### Java实现示例 以下是一个使用递归和DOM来遍历XML文档的Java代码示例: ```java package ...

    XmlDom - 全能最强XML模块

    在XmlDom中,我们可以方便地遍历XML文档的元素树,例如: ```python for child in doc.childNodes: if child.nodeType == child.ELEMENT_NODE: print(child.tagName) ``` 这段代码会打印出XML文档中所有的元素...

    dom动态生成使用XML DOM生成XML.pdf

    XML DOM将XML文档视为一个树形结构,其中每个节点都表示文档的一部分,如元素、属性、文本等。 #### 三、XML DOM的主要对象 XML DOM 包含四个主要对象: - **XMLDOMDocument**:表示整个XML文档,是DOM层次结构的...

    XML_DOM标准

    DOM将整个XML文档转换成一个树结构,这样每个节点都可以被轻松地访问和操作。 #### 二、DOM树的结构 DOM树的基本构成单元是节点(Node),包括文档节点、元素节点、属性节点、文本节点等。每个节点都代表了文档的...

    XML_DOM 教程 XML_DOM 教程

    XML DOM是一种在编程中处理XML文档的标准接口,它允许程序员和脚本动态地访问、修改、添加和删除XML文档的结构、内容和样式。DOM将XML文档视为一棵由节点构成的树,其中每个元素、属性、文本等都是一个独立的节点。 ...

    xmldom4j解析

    DOM解析会将整个XML文档加载到内存中形成一棵树形结构,方便访问任意节点,但内存消耗大;SAX解析则采用事件驱动,逐行读取XML,适合处理大型文档,但不支持随机访问。 三、DOM4J解析XML 1. 创建Document对象:使用...

    XML DOM 教程

    8. **序列化(Serialization)**:修改后的DOM树可以序列化回XML字符串,保存到文件或发送到网络。 在学习XML DOM时,理解以下几个关键点至关重要: - **节点接口(Node Interface)**:所有DOM节点都继承自Node...

    dom读取xml与写入xml

    1. 创建DOM树:使用DOM API创建一个新的DOM树结构,这可能涉及到创建元素、属性和文本节点。 2. 修改DOM树:如果需要,可以通过DOM接口对已有的DOM树进行修改,添加、删除或更新节点。 3. 保存XML:调用DOM API的`...

    XML DOM教程

    DOM将XML文档转换成一个树形结构,其中每个组成部分被称为节点。这个模型允许开发者通过JavaScript或其他编程语言来读取、修改、添加或删除XML文档的内容。 在深入学习DOM之前,你需要对HTML/XHTML、JavaScript和...

    XmlDom.rar_DOM_dom xml

    在"XmlDom.cs"文件中,我们可能看到的是C#代码,它展示了如何加载XML文件到DOM树,遍历树以读取或修改数据,以及如何保存更改后的文档。以下是一些基本的DOM操作步骤: 1. 加载XML文档:首先,我们需要使用`Xml...

    xml文件树形显示,可添加删除修改xml节点

    DOM树将XML文档的每个部分映射为一个节点,包括元素节点、属性节点、文本节点等。通过遍历这个树形结构,我们可以访问和修改XML文档的任何部分。 "可添加删除修改xml节点"则意味着我们需要具备对DOM树进行操作的...

    XML&DOM帮助文档.rar

    "XMLDOM教程·chm.chm" 这个文件很可能是关于XML DOM的一个详细教程,通常包含XML的基本语法、DOM的概念、DOM的API以及如何使用DOM解析和操作XML文档等内容。在这样的教程中,你可能会学到如何创建DOM对象、查找和...

Global site tag (gtag.js) - Google Analytics