20111107150223

Download Report

Transcript 20111107150223

第8章
XML DOM编程模型
目标
理解DOM模型
解析XML文档,生成文档对象
操纵DOM模型的对象、接口、
属性、方法
8.1 文档对象模型概述
• DOM(Document Object Model)定义了
文档的逻辑结构和访问、操纵文档的方法。
它为XML、HTML提供了应用程序接口
API。
• DOM中的对象允许开发者从文档中读取、
搜索、修改、增加和删除数据-它们为文
档导航提供了标准的功能定义,并且操纵
XML文档的内容和结构。
• DOM提供的对象和方法可以和任何编程
语言(java、c++、VB)一起使用,也可
以与VBScript、JavaScript脚本语言一
切使用。
8.2 XML解析器
•
•
•
•
DOM
SAX
JDOM
DOM4J
8.3 DOM解析树
 最常见的节点类型:
– 元素:元素是 XML 的基本构件。元素可以有其它元素、文本
节点或两者兼有来作为其子节点。元素节点还是可以有属性的
唯一类型的节点。
– 属性:属性节点包含关于元素节点的信息,但实际上,不认为
它是元素的子节点
– 文本:文本节点是:文本。它可以包含许多信息或仅仅是空白。
– 文档(根节点):文档节点是整个文档中所有其它节点的父节
点。(根节点不等于根元素节点!)
 较不常见的节点类型:CDATA、注释、处理指令
XML文档
<?xml version=“1.0” encoding=“gb2312” ?>
<books>
<book>
<author>曹雪芹</author>
<title>红楼梦</title >
</book>
<book>
<author>孙更新</author>
<title>XML实用大全</title>
</book>
</books>
DOM解析树
文档(根节点)
根元素
节点
books
元素
book
author
book
title
文本
曹雪芹
红楼梦
author
孙更新
title
XML实用大全
MSXML解析XML文档的过程
8.4 MSXML DOM模型结构
•
•
•
•
XML DOM提供让你遍历、读取和操纵XML文档的结
构和内容,其主要对象和方法有:
DOMDocument对象:描述全部文档映射表,它包括
文档所有信息。
IXMLDOMNode对象:描述文档里的节点,此节点
可以是元素、属性、处理指令、文本或其他存储在
XML文档里的信息。
IXMLDOMNodeList对象:描述节点对象的集合,可
以使用该对象遍历这个集合,可以用数值访问。
IXMLDOMParseError对象:用来验证XML文档对于
DTD、XSD的正确性。
8.4.1 DOMDocument对象
DOMDocument 对象表示DOM树的最顶层节
点,它实现了使用XML文档所需的所有方法:
• createElement(elementname) :创建以元素
名命名的节点,但名称空间受限制的元素除外
• createAttribute(attributename):创建以属
性名命名的属性节点
• createComment(text):创建注释节点
• createTextNode(text):创建正文节点
• createNode(type,name,namespace-URI):
建节点,type可以是1(元素)、2(属性),
3(文本节点),name为节点名,
namespace-URI为名称空间。
• getElementsByTagName(elementName):
elementName代表要搜索的元素,返回
IXMLDOMNodeList对象包含的节点集合。
• Load(XMLdocment):有2种方法可以载入XML文
件。例
docobj.load(“http:www.ecomtcybershoppe.com/p
roducts.xml”)或docobj.load(“c: \product.xml”)
• LoadXML(string):把成形的代码或整个XML文档
载入DOMDocument对象中。
• transformNode(style sheet object):把样式表
加到XML文档上处理节点,返回转换结果。
• appendChild(child node):把用createNode()或
createElement()方法创建的节点或元素,追加到
树形结构上。
• Save(destination):把DOMDocument对象保存到
指定目的地。例docobj.save(“http://www.
cybershop.com/product.xml”)
DOMDocument对象的属性
• async:指定是否允许异步加载,取布尔值。如果为
true,即使文档仍在载入,脚本也会继续执行;为
false时,脚本会等待文档全部被载入后才会执行代码。
一般用 docobj.async=false
• childNodes:返回属于父节点的子节点。其值是
IXMLDOMNodeLisT类型。例 var
firstelem=docobj.childNodes.item(0)
• documentElement:包含用DOMDocument表示的
XML文档的根元素。例 var
root=docobj.documentElement
• firstChild:返回父元素的第一个子节点,该属性是
只读的。例 var firstelem=firstChild
• lastChild:返回父元素的最后一个子节点。例var
firstelem=lastChild
• parseError:该属性返回一个包含大部分最
近产生的错误信息的对象。例 var
error=docobj.parseError
• readyState:返回文档的状态,1—正在载
入中;2—已下载;3—对话;4—结束。例
var stateinfo=docobj.readyState
• xml :返回一个节点及其子节点的XML表示。
例document.write(docobj.xml)
• validateOnPage:指定解析器是否在解析
XML文档时验证其合法性。例
docobj.validateOnPage=true
8.4.2 IXMLDOMNode对象
•
•
•
•
•
•
IXMLDOMNode对象代表XML文档树形结构中
的一个单个节点,它可能包含其他子节点的元素。使
用方法有:
appendChild(newChild):把newChild加到使用节点的
子节点的末尾。
insertBefore(newNode,refNode):把newNode插在
已存节点refNode之前。
removeChild(nodeName):删除指定节点。
replaceChild(newNode,oldNode):替换节点。
hasChildnode():查找子节点。
cloneNode(boolean):克隆节点,如为true,返回
IXMLDOMNode对象的完全克隆。
IXMLDOMNode属性
•
•
•
•
•
•
•
•
nodeName: 返回节点名称。
nodeType: 返回节点类型。
Nodevalue: 返回节点包含的文本。
childNodes: 返回节点的子节点数。
firstChild: 返回该节点的第一个子节点。
lastChild: 返回该节点的最后一个子节点。
Text: 返回在IXMLDOMNode对象中的文本。
Xml: 返回IXMLDOMNode对象的代码。
8.4.3 IXMLDOMNodelist对象
• 为了操纵XML文档, IXMLDOMNodelist对
象提供存在于XML文档中的节点集合。节点集
对象的改变立即反映到节点集上。
IXMLDOMNodelist对象也可以遍历节点集。
• 方法1:item(number),返回指定数值对应位
置的节点。
• 方法2:nextNode(),返回节点集的下一个节
点。
• 使用IXMLDOMNodelist属性length可以获得节
点集中节点的个数。
8.4.4 IXMLDOMParseError对象
•
•
•
•
•
IXMLDOMParseError对象返回大部分最近
发生的解析错误。 IXMLDOMParseError对象提
供各种属性来检索错误,如错误代码、错误内容、
引起错误的行代码等。
errorCode: 该属性包含长整形错误代码,没有错
误,返回0。
reason: 该属性包含解释错误原因的字符串。
Line: 该属性存储代表错误行数的长整形。
linePos: 该属性存储代表错误位置的长整形。
srcText: 该属性包含引起错误的那一行字符串。
8.5 DOM编程步骤
• DOM编程第一步就是确保机器上安装了Microsoft
XML 4.0(或更高版本)。
• 在MSXML解析器的使用过程中,我们可以使用文档
中的CreateElement方法创建一个节点来装载和保存
XML文件,也可以通过Load或者是 LoadXML方法从
一个指定的URL来装载一个XML文档。
• Save方法是用来把文档保存到一个指定的位置。Save
方法中参数destination用来表示需要被保存的对象的
类型,对象可以是一个文件、一个ASP Response方法、
一个XML文档对象,或者是一个能够支持持久保存
(persistence)的客户对象。
使用JAVASCRIPT编写生成
DOM文档对象的方法
var xmlDoc=new
ActiveXObject("Msxml2.DOMDocument.4.0");
xmlDoc.async=false;
xmlDoc.load("candidate.xml");
生成XML文档对象xmlDoc,xmlDoc中包含XML文档中所有元素和节点
装载XML文档完毕后才开始处理下一步骤
将XML文档装载到文档对象中,在内存中形成文档对象树
8.6 本章小结
• DOM为处理X M L文档提供了可编程的方法。
• DOM允许我们在客户端和服务器端修改X M L
数据结构。
• DOM为数据库之间的信息传递提供了理想的机
制。
• DOM在不同的平台上可以有不同的实现方式。
• DOM是内存密集型操作,它不适于处理大型X
M L文件。