XML文档对象模型手册

XML 对象模型

------------------------------------------------------------
来源:节选自 实战XML第二版(ScriptXML):Appendix A XML 对象模型

这个附录将详细地探究XML 对象模型,包括组成模型的对象、它们的属性与方法,和他们如何被应用在应用程序中。

对象模型结构

对象是一种树状结构的组织。树的主干便是Document 对象,其它的对象便由此对象分支而来。

XML 对象模型由四种基本的对象所组成:

. document 对象-XML 数据来源
. node 对象-一个父节点或其中的一个子节点
. nodeList 对象—兄弟节点的清单
. parseError 对象—一个无内容的对象,用来接收解析错误的讯息

图A-1 显示了这些对象间的关系。

DOCUMENT
|
| |------------NODE
|-------NODE-------|------------NODE
| |------------NODE
|
|--------------NODE
|--------------NODE
|--------------NODE
|--------------NODE

图A-1:XML 对象模型

在对象模型中的每个对象拥有特定的属性或方法,或两者都有。若使用Script 程序代码,内容作者可以直接地使用这些属性和方法来取得信息并运用XML 数据。这个附录将完整地介绍XML对象模型,并检视这些对象和相关的属性与方法。
既然本书是讨论如何运用XML 的,就必须深入了解对象模型的运作。稍后在这附录中,有一些如何在对象模型中使用对象的范例。要使用这些范例,您将需要列在A-1 中的文字码,也可以在随书光盘中找到它(Appxa\LastA_1.xml)。

1<email priority="high"="">
2<to>[email protected]</to>
3<from>[email protected]</from>
4<cc>[email protected]</cc>
5<bcc>[email protected]</bcc>
6<subject>My document is a tree.</subject>
7<body>This is an example of a tree structure.</body>
8</email>

[文字码A-1]

您可以从文件类型宣告中看到,这份文件使用了DTD。这份DTD 文件如文字码A-2 所示,您也可以在随书光盘中的AppxA\LstA_2.dtd 找到它。

[文字码A-2]

最后,XML 文件将透过HTML 网页来显示,下面便是HTML 的文字码(在随书光盘AppxA\LstA_3.htm 中)。

 1<html>
 2<head>
 3<script event=onload="" for=window="" language="javascrip"_="">   
 4showMe();   
 5</script>
 6<script language="&#106avascript"="">   
 7var xmlDoc = new ActiveXObject("microsoft.xmldom");   
 8xmlDoc.load("LstA_1.xml");   
 9function showMe()   
10{   
11// Insert sample code here.   
12}   
13</script>
14<title>Code Listing A-3</title>
15</head>
16<body>
17</body>
18</html>

[文字码A-3]

请注意在A-3 文字码中,showMe 函式并没有包含程序代码。因为要插入什么程序代码是由您来决定的,这个程序片段只是要让您了解showMe 函式的功用。
---------------------------------------------------------------------------------
[Note]
使用附录中的范例时,您可以在LstA_3.htm 的showMe 函式中输入片断程序代码,也可以使用随书光盘中AppxA 目录中的HTML 档案。
---------------------------------------------------------------------------------

一、Document 物件

如同前面所提到的,这Document 对象代表这份文件的数据来源。这个对象模型允许文件作者使用任何支持XML 处理器的浏览器或应用程序,透过script 程序代码来加载XML 文件。
举例来说,一个文件能藉由建立一个ActiveX control 的实例,并且呼叫load 方法(稍后讨论)来加载文件,如同范例中的HTML 码:

var xmlDoc = new ActiveXObject("microsoft.xmldom");
xmlDoc.load("LstA_1.xml");

加载也可借着使用Java applet 来完成,如下所示:

1<script>   
2xmldso.load("LstA_1.xml");   
3</script>
1<body>
2<applet code=com.ms.xml.dso.xmldso.class="" height=0="" id=xmldso="" mayscript=true="" width=100%="">
3</applet>
4</body>

因为对象模型预期将会使用load 方法,因此,程序代码与控件被加载后的程序代码是相同的。重要的是,一旦数据来源被建立后,对象模型便会提供一致的方式来浏览及处理XML 资料。
---------------------------------------------------------------------------------
[Note]
Msxml 延伸基本的Document 对象模型(DOM),来包含XML 特定的界面。讨论DOM 的概念超出本书的范围。所以,下面的单元只把焦点集中在XML DOM 的一般性使用。
---------------------------------------------------------------------------------

(一)、Document 对象属性

以下所列是可用的Document 对象属性:
1. async
2. attributes
3. childNodes
4. doctype
5. documentElement
6. firstChild
7. implementation
8. lastChild
9. nextSibling
10. nodeName
11. nodeType
12. nodeValue
13. ondataavailable
14. onreadystatechange
15. ownerDocument
16. parentNode
17. parseError
18. previousSibling
19. readyState
20. url
21. validateOnParse
22. xml

async 属性
------------------

async 属性表示是否允许异步的下载。

基本语法:

boolValue = XMLDocument.async;XMLDocument.async = boolValue;
-
说明:布尔值是可擦写的(read/write),如果准许异步下载,值为True;反之则为False。

使用范例:

以下的范例请参照随书光盘的AppxA\LstA_4.htm:
xmlDoc.async = "false";
alert(xmlDoc.async);

attribute 属性
-------------------

传回目前节点的属性列表。

基本语法:

objAttributeList = xmlNode.attributes;
说明:传回一个物件。如果此节点不能包含属性,则传回空值。

使用范例:

以下的范例请参照随书光盘的AppxA\LstA_5.htm:
objAttList = xmlDoc.documentElement.attributes;
alert(objAttList);

------------------------------------------------------------------------------
[Note]
例子以[object]为结果传回。这是由于被传回的对象,若不使用其它的对象属性,就不能以文字来表示,在本附录中包含数个这样的例子。尽管很多对象属性本身似乎不是很有用,但您将会在附录中看到如何组合属性和方法得到您要的结果。
------------------------------------------------------------------------------

childNodes 属性
-----------------

传回一个节点清单,包含该节点所有可用的子节点。

基本语法:

objNodeList=node.childNodes;
说明:传回一个物件。假如这节点没有子节点,传回null。

使用范例:

以下的例子请参照随书光盘中的AppxA\LstA_6.htm:
objNodeList = xmlDoc.childNodes;
alert(objNodeList);

doctype 属性
-----------------

传回文件型态节点,包含目前文件的DTD。这节点是一般的文件型态宣告,例如,节点

,名为EMAIL 的节点物件会被传回。

基本语法:

objDocType=xmlDocument.doctype;
说明:传回一个对象,这个属性是只读的。假如这文件不包含DTD,会传回null。

使用范例:

以下的例子请参照随书光盘AppxA\LstA_7.htm:
objDocType = xmlDoc.doctype;
alert(objDocType.nodeName);
documentElement 属性

确认XML 文件的根(Root)节点。
----------------------------

基本语法:

objDoc=xmlDocument.documentElement;
说明:回一个在单一根文件元素中包含数据的对象。此属性可读/写,如果文件中不包含根节点,将传回null。

使用范例:

以下的范例请参照随书光盘中的AppxA\LstA_8.htm:
objDocRoot = xmlDoc.documentElement;
alert(objDocRoot);

firstChild 属性
-----------------

确认在目前节点中的第一个子元素。

基本语法:

objFirstChild = xmlDocNode.firstChild ;
说明:此属性只读且会传回一对象,如果节点中没有包含第一个子元素,将传回null。

使用范例:

以下的范例请参照随书光盘中的AppxA\LstA_9.htm:
objFirstChild = xmlDoc.documentElement.firstChild;
alert(objFirstChild);

implementation 属性
---------------------

DOM 应用程序能使用其它实作中的对象。implementation 属性确认目前XML 文件的DOMimplementation 对象。

基本语法:

objImplementation = xmlDocument.implementation;
说明:此属性只读且传回一个对象。

使用范例:

以下的范例请参照随书光盘中的AppxA\LstA_10.htm:
objImp = xmlDoc.implementation;
alert(objImp);

lastChild 属性
---------------

确认目前节点中最后的子元素。

基本语法:

objLastChild = xmlDocNode.lastChild;
说明:此属性只读且传回一个对象。如果节点中没有包含最后子元素,将传回null。

使用范例:

以下的范例请参照随书光盘中的AppxA\LstA_11.htm:
objLastChild = xmlDoc.documentElement.lastChild;
alert(objLastChild);

nextSibling 属性
------------------

在目前文件节点的子节点列表中传回下一个兄弟节点。

基本语法:

objNextSibling = xmlDocNode.nextSibling;
说明:此属性是只读且传回一个对象。如果节点中没有包含其它的相关节点,会传回null。

使用范例:

以下的范例请参照随书光盘中的AppxA\LstA_12.htm:
objSibling = xmlDoc.documentElement.childNodes.item(1) .nextSibling;
alert(objSibling);

nodeName 属性
---------------

传回代表目前节点名称的字符串。

基本语法:

strNodeName = xmlDocNode.nodeName ;
说明:传回一个字符串。这个属性是只读的,传回元素名称、属性或实体参照。

使用范例:

以下的范例请参照随书光盘中的AppxA\LstA_13.htm:
strNodeName = xmlDoc.documentElement.nodeName;
alert(strNodeName);

nodeType 属性
---------------

辨识节点的DOM 型态。

基本语法:
numNodeType = xmlDocNode.nodeType ;
说明:此属性只读且传回一个数值。

有效的数值符合以下的型别:
1-ELEMENT
2-ATTRIBUTE
3-TEXT
4-CDATA
5-ENTITY REFERENCE
6-ENTITY
7-PI (processing instruction)
8-COMMENT
9-DOCUMENT
10-DOCUMENT TYPE
11-DOCUMENT FRAGMENT
12-NOTATION
-------------------------------------------------------------------------------
[Note]
上述的数据型态将在附录B 中有更深入的介绍。
-------------------------------------------------------------------------------
使用范例:

以下的范例请参照随书光盘中的AppxA\LstA_14.htm:
numNodeType = xmlDoc.documentElement.nodeType;
alert(numNodeType);v

  1<div class="content">nodeValue 属性   
  2\----------------- 
  3
  4传回指定节点相关的文字。这并非一个元素中数据的值,而是与一个节点相关且未解析的文字,就像一个属性或者一个处理指令。 
  5
  6基本语法: 
  7
  8varNodeValue = xmlDocNode.nodeValue;   
  9说明:传回的文字代表以节点的nodeType 属性为主的型态值。(请参考附录中的nodeType 属性。)因为节点型态可能是几种数据型态中的一种,传回值也因此有差异。传回null 的节点型态   
 10有:DOCUMENT、ELEMENT、DOCUMENT TYPE、DOCUMENT FRAGMENT、ENTITY、ENTITY REFERENCE,和NOTATION。此属性可擦写。 
 11
 12使用范例: 
 13
 14以下的范例请参照随书光盘中的AppxA\LstA_15.htm:   
 15varNodeValue = xmlDoc.documentElement.nodeValue;   
 16alert(varNodeValue); 
 17
 18  
 19ondataavailable 属性   
 20\--------------------- 
 21
 22指定一个事件来处理ondataavailable 事件。(更多关于ondataavailable 事件的信息,请参阅附录中<Document 对象事件>的部分)。 
 23
 24基本语法: 
 25
 26xmlDocNode.ondataavailable = value;   
 27说明:此属性是唯写,允许文件作者一旦数据为可用,即可尽快的使用数据来运作。 
 28
 29使用范例: 
 30
 31以下的范例请参照随书光盘中的AppxA\LstA_16.htm:   
 32xmlDoc.ondataavailable = alert("Data is now available."); 
 33
 34  
 35onreadystatechange 属性   
 36\------------------------ 
 37
 38指定一个事件来处理onreadystatechange 事件。这个事件能辨识readyState 属性的改变。(更多有关onreadystatechange 事件的信息,请参阅附录中<document 对象事件=""> 的部分。) 
 39
 40基本语法: 
 41
 42xmlDocNode.onreadystatechange = value;   
 43说明:此属性是唯写的,允许文件作者指定当readyState 属性改变时呼叫事件。 
 44
 45使用范例: 
 46
 47以下的范例请参照随书光盘中的AppxA\LstA_17.htm:   
 48xmlDoc.onreadystatechange =   
 49alert("The readyState property has changed."); 
 50
 51  
 52ownerDocument 属性   
 53\------------------- 
 54
 55传回文件的根节点,包含目前节点。 
 56
 57基本语法: 
 58
 59objOwnerDoc = xmlDocument.ownerDocument;   
 60说明:此属性是只读的,传回一个包含文件根节点的对象,包含特定的节点。 
 61
 62使用范例: 
 63
 64以下的范例请参照随书光盘中的AppxA\LstA_18.htm:   
 65objOwnerDoc = xmlDoc.childNodes.item(2).ownerDocument;   
 66alert(objOwnerDoc); 
 67
 68  
 69parentNode 属性   
 70\----------------- 
 71
 72传回目前节点的父节点。只能应用在有父节点的节点中。   
 73基本语法: 
 74
 75objParentNode = xmlDocumentNode.parentNode;   
 76说明:此属性是只读的,传回包含指定节点的父节点对象。如果此节点不存在于文件树中,将传回null。 
 77
 78使用范例: 
 79
 80以下的范例请参照随书光盘中的AppxA\LstA_19.htm:   
 81objParentNode = xmlDoc.childNodes.item(1).parentNode;   
 82alert(objParentNode); 
 83
 84  
 85parseError 属性   
 86\----------------- 
 87
 88传回一个DOM 解析错误对象,此对象描述最后解析错误的讯息。 
 89
 90基本语法: 
 91
 92objParseErr = xmlDocument.parseError;   
 93说明:此属性是只读的。如果没有错误发生,将传回0。 
 94
 95使用范例: 
 96
 97以下的范例请参照随书光盘中的AppxA\LstA_20.htm:   
 98objParseErr = xmlDoc.parseError;   
 99alert(objParseErr); 
100
101  
102previousSibling 属性   
103\--------------------- 
104
105传回目前节点之前的兄弟节点。 
106
107基本语法: 
108
109objPrevSibling = xmlDocument.previousSibling;   
110说明:传回一个对象,这个属性是只读的。若该节点没有包含前面的兄弟节点,会传回null。 
111
112使用范例: 
113
114以下的范例请参照随书光盘中的AppxA\LstA_21.htm:   
115objPrevSibling =   
116xmlDoc.documentElement.childNodes.item(3).previousSibling   
117alert(objPrevSibling); 
118
119  
120readyState 属性   
121\------------------- 
122
123传回XML 文件资料的目前状况。 
124
125基本语法: 
126
127intState = xmlDocument.readyState;   
128说明:这个属性是只读的,传回值有以下的可能: 
129
1300-UNINITIALIZED:XML 对象被产生,但没有任何文件被加载。   
1311-LOADING:加载程序进行中,但文件尚未开始解析。   
1322-LOADED:部分的文件已经加载且进行解析,但对象模型尚未生效。   
1333-INTERACTIVE:仅对已加载的部分文件有效,在此情况下,对象模型是有效但只读的。   
1344-COMPLETED:文件已完全加载,代表加载成功。 
135
136使用范例: 
137
138以下的范例请参照随书光盘中的AppxA\LstA_22.htm:   
139alert("The readyState property is " + xmlDoc.readyState); 
140
141  
142url 属性   
143\--------------- 
144
145传回最近一次加载XML 文件的URL。 
146
147基本语法:   
148strDocUrl = xmlDocument.url;   
149说明:这个属性是只读的,传回最近一次加载成功文件的URL,若文件仅存在主存储器中(表示该文件并非由外部档案加载),则传回null。 
150
151使用范例: 
152
153以下的范例请参照随书光盘中的AppxA\LstA_23.htm:   
154alert(xmlDoc.url); 
155
156  
157validateOnParse 属性   
158\---------------------- 
159
160告诉解析器文件是否有效。 
161
162基本语法: 
163
164boolValidate = xmlDocument.validateOnParse;   
165xmlDocument.validateOnParse = boolValidate;   
166说明:此属性是可擦写的。如果传回值为true,表示文件被解析时被确认是有效的。如果传回false,表示文件是无效的,并被认为只是标准格式的(well-formed)文件。 
167
168使用范例: 
169
170以下的范例请参照随书光盘中的AppxA\LstA_24.htm:   
171xmlDoc.validateOnParse = true;   
172alert(xmlDoc.validateOnParse); 
173
174  
175xml 属性   
176\------------ 
177
178传回指定节点的XML 描述和所有的子节点。 
179
180基本语法:   
181xmlValue = xmlDocumentNode.xml;   
182说明:此属性是只读的。 
183
184使用范例: 
185
186以下的范例请参照随书光盘中的AppxA\LstA_25.htm:   
187xmlValue = xmlDoc.documentElement.xml;   
188alert(xmlValue);</document></div>
  1<div class="content">
  2<div class="content">(二)、Document 对象方法 
  3
  4  
  5以下列出关于Document 对象可用的方法。   
  61\. abort   
  72\. appendChild   
  83\. cloneNode   
  94\. createAttribute   
 105\. createCDATASection   
 116\. createComment   
 127\. createDocumentFragment   
 138\. createElement   
 149\. createEntityReference   
 1510\. createNode   
 1611\. createProcessingInstruction   
 1712\. createTextNode   
 1813\. getElementsByTagName   
 1914\. hasChildNodes   
 2015\. insertBefore   
 2116\. load   
 2217\. loadXML   
 2318\. nodeFromID   
 2419\. parsed   
 2520\. removeChild   
 2621\. replaceChild   
 2722\. selectNodes   
 2823\. selectSingleNode   
 2924\. transformNode 
 30
 31  
 32abort 方法   
 33\------------- 
 34
 35abort 方法取消一个进行中的异步下载。 
 36
 37基本语法: 
 38
 39xmlDocument.abort();   
 40说明:如果这个方法在异步下载时被呼叫,所有的解析动作会停止,而且在内存中的文件会被释放。 
 41
 42  
 43AppendChild 方法   
 44\------------------ 
 45
 46加上一个节点当作指定节点最后的子节点。 
 47
 48基本语法: 
 49
 50xmlDocumentNode.appendChild(newChild);   
 51说明:newChild 是附加子节点的地址。 
 52
 53使用范例: 
 54
 55以下的范例请参照随书光盘中的AppxA\LstA_26.htm:   
 56docObj = xmlDoc.documentElement;   
 57alert(docObj.xml);   
 58objNewNode = docObj.appendChild(xmlDoc.documentElement. firstChild);   
 59alert(docObj.xml); 
 60
 61  
 62cloneNode 方法   
 63\--------------- 
 64
 65建立指定节点的复制。 
 66
 67基本语法: 
 68
 69xmlDocumentNode.cloneNode(deep);   
 70说明:deep 是一个布尔值。如果为true,此节点会复制以指定节点发展出去的所有节点。如果是false,只有指定的节点和它的属性被复制。 
 71
 72使用范例: 
 73
 74以下的范例请参照随书光盘中的AppxA\LstA_27.htm:   
 75currNode = xmlDoc.documentElement.childNodes.item(1);   
 76objClonedNode = currNode.cloneNode(1);   
 77alert(objClonedNode.xml); 
 78
 79  
 80createAttribute 方法   
 81\------------------------ 
 82
 83建立一个指定名称的属性。 
 84
 85基本语法:   
 86xmlDocument.createAttribute(name);   
 87说明:name 是被建立属性的名称。 
 88
 89使用范例: 
 90
 91以下的范例请参照随书光盘中的AppxA\LstA_28.htm:   
 92objNewAtt = xmlDoc.createAttribute("encryption");   
 93alert(objNewAtt.xml); 
 94
 95  
 96createCDATASection 方法   
 97\------------------------ 
 98
 99建立一个包含特定数据的CDATA。 
100
101基本语法: 
102
103xmlDocument.createCDATASection(data);   
104说明:date 是一个字符串,且包含了被置放在CDATA 的资料。 
105
106使用范例: 
107
108以下的范例请参照随书光盘中的AppxA\LstA_29.htm:   
109objNewCDATA = xmlDoc.createCDATASection("This is a CDATA Section");   
110alert(objNewCDATA.xml); 
111
112  
113createComment 方法   
114\------------------- 
115
116建立一个包含指定数据的批注。 
117
118基本语法: 
119
120xmlDocument.createComment(data);   
121说明:data 是一个字符串,且包含了被置放在批注的资料。 
122
123使用范例: 
124
125以下的范例请参照随书光盘中的AppxA\LstA_30.htm:   
126objNewComment = xmlDoc.createComment("This is a comment");   
127alert(objNewComment.xml); 
128
129  
130createDocumentFragment 方法   
131\----------------------------- 
132
133建立一个空的文件片断对象。 
134
135基本语法: 
136
137xmlDocument.createDocumentFragment();   
138说明:一个新的文件片断被建立,但没有加到文件树中。要加入片断到文件树中,必须使用插入方法,例如insertBefore、replaceChild 或appendChild。 
139
140使用范例: 
141
142以下的范例请参照随书光盘中的AppxA\LstA_31.htm:   
143objNewFragment = xmlDoc.createDocumentFragment();   
144alert(objNewFragment.xml); 
145
146  
147createElement 方法   
148\-------------------- 
149
150建立一个指定名称的元素。 
151
152基本语法: 
153
154xmlDocument.createElement(tagName);   
155说明:tagName 是一个区分大小写的字符串来指定新元素名称。 
156
157使用范例: 
158
159以下的范例请参照随书光盘中的AppxA\LstA_32.htm:   
160objNewElement = xmlDoc.createElement("TO");   
161alert(objNewElement.xml); 
162
163  
164createEntityReference 方法   
165\----------------------------- 
166
167建立一个参照到指定名称的实体。 
168
169基本语法: 
170
171xmlDocument.createEntityReference(name);   
172说明:name 是一个区分大小写的字符串,来指定新实体参照的名称。一个新的实体参照被建立,但是并没有被加到文件树中。若要将实体参照加到文件树中,必须使用一种插入方法,例如:insertBefore,replaceChild,或appendChild。 
173
174使用范例: 
175
176以下的范例请参照随书光盘中的AppxA\LstA_33.htm:   
177objNewER = xmlDoc.createEntityReference("eRef");   
178alert(objNewER.xml); 
179
180  
181createNode 方法   
182\---------------------- 
183
184建立一个指定型态、名称,及命名空间的新节点。 
185
186基本语法: 
187
188xmlDocument.createNode(type, name, nameSpaceURI);   
189说明:type 用来确认要被建立的节点型态,name 是一个字符串来确认新节点的名称,命名空间的前缀则是选择性的。nameSpaceURI 是一个定义命名空间URI 的字符串。如果前缀被包含在名称参数中,此节点会在nameSpaceURI 的内文中以指定的前缀建立。如果不包含前缀,指定的命名空间会被视为预设的命名空间。 
190
191使用范例: 
192
193以下的范例请参照随书光盘中的AppxA\LstA_34.htm:   
194objNewNode = xmlDoc.createNode(1, "TO", "");   
195alert(objNewNode.xml); 
196
197  
198createProcessingInstruction 方法   
199\----------------------------------- 
200
201建立一个新的处理指令,包含了指定的目标和数据。 
202
203基本语法: 
204
205xmlDocument.createProcessingInstruction(target, data);   
206说明:target 是表示目标、名称或处理指令的字符串。Data 是表示处理指令的值。一个新的处理指令被建立,但是并没有加到文件树中。要把处理指令加到文件树中,必须使用插入方法,例如:insertBefore、replaceChild,或是appendChild。 
207
208使用范例: 
209
210以下的范例请参照随书光盘中的AppxA\LstA_35.htm:   
211objNewPI =   
212xmlDoc.createProcessingInstruction(‘XML’, ‘version="1.0"’);   
213alert(objNewPI.xml); 
214
215  
216createTextNode 方法   
217\------------------------ 
218
219建立一个新的text 节点,并包含指定的数据。 
220
221基本语法: 
222
223xmlDocument.createTextNode(data);   
224\-   
225说明:data 是一个代表新text 节点的字符串。一个新的text 节点被建立,但是没有加到文件树中。若要将节点加到文件树中,必须使用插入方法,例如:insertBefore,replaceChild或appendChild。 
226
227使用范例: 
228
229以下的范例请参照随书光盘中的AppxA\LstA_36.htm:   
230objNewTextNode = xmlDoc.createTextNode("This is a text node.");   
231alert(objNewTextNode.xml); 
232
233  
234getElementsByTagName 方法   
235\----------------------------- 
236
237传回指定名称的元素集合。 
238
239基本语法: 
240
241objNodeList = xmlDocument.getElementsByTagName(tagname);   
242说明:tagname 是一个字符串,代表找到的元素卷标名称。使用tagname "*"传回文件中所有找到的元素。 
243
244使用范例: 
245
246以下的范例请参照随书光盘中的AppxA\LstA_37.htm:   
247objNodeList = xmlDoc.getElementsByTagName("*");   
248alert(objNodeList.item(1).xml); 
249
250  
251haschildnodes 方法   
252\---------------------- 
253
254如果指定的节点有一个或更多子节点,传回值为true。 
255
256基本语法: 
257
258boolValue = xmlDocumentNode.hasChildNodes() ;   
259说明:如果此节点有子节点传回值为true,否则传回false 值。 
260
261使用范例: 
262
263以下的范例请参照随书光盘中的AppxA\LstA_38.htm:   
264boolValue = xmlDoc.documentElement.hasChildNodes();   
265alert(boolValue);</div>
266<div class="content">
267<div class="content">insertBefore 方法   
268\--------------------- 
269
270在指定的节点前插入一个子节点。 
271
272基本语法: 
273
274objDocumentNode = xmlDocumentNode.insertBefore(newChild,refChild);   
275\-   
276说明:newChild 是一个包含新子节点地址的对象,refChild 是参照节点的地址。新子节点被插到参照节点之前。如果refChild 参数没有包含在内,新的子节点会被插到子节点列表的末端。 
277
278使用范例: 
279
280以下的范例请参照随书光盘中的AppxA\LstA_39.htm:   
281objRefNode = xmlDoc.documentElement;   
282alert(xmlDoc.xml);   
283objNewNode = xmlDoc.createComment("This is a comment");   
284xmlDoc.insertBefore(objNewNode, objRefNode);   
285alert(xmlDoc.xml); 
286
287  
288load 方法   
289\-------------- 
290
291表示从指定位置加载的文件。 
292
293基本语法: 
294
295boolValue = xmlDocument.load(url);   
296说明:url 包含要被加载档案的URL 的字符串。假如文件加载成功,传回值即为true。若加载失败,传回值为false。 
297
298使用范例: 
299
300以下的范例请参照随书光盘中的AppxA\LstA_40.htm:   
301boolValue = xmlDoc.load("LstA_1.xml");   
302alert(boolValue); 
303
304  
305loadXML 方法   
306\---------------- 
307
308加载一个XML 文件或字符串的片断。 
309
310基本语法: 
311
312boolValue = xmlDocument.loadXML(xmlString);   
313说明:xmlString 是包含XML 文字码的字符串。   
314这个字符串可以包含整个文件或者只是一个文件片断。如果文件加载成功,传回值为true。假如加载失败,传回值则是false。 
315
316使用范例: 
317
318以下的范例请参照随书光盘中的AppxA\LstA_41.htm:   
319xmlString = "<greeting><message>Hello!</message></greeting>";   
320boolValue = xmlDoc.loadXML(xmlString);   
321alert(boolValue); 
322
323  
324nodeFromID 方法   
325\------------------   
326传回节点ID 符合指定值的节点。 
327
328基本语法: 
329
330xmlDocumentNode = xmlDocument.nodeFromID(idString);   
331说明:idString 是一个包含ID 值的字符串。符合的节点必定是ID 型态。若符合,将传回一个对象;若操作失败,则传回null。 
332
333使用范例: 
334
335以下的范例请参照随书光盘中的AppxA\LstA_42.htm:   
336objDocumentNode = xmlDoc.nodeFromID("TO");   
337alert(objDocumentNode); 
338
339  
340parsed 方法   
341\------------- 
342
343会验证该指定的节点(node)及其衍生的子节点(descendants)是否已被解析过。 
344
345基本语法: 
346
347boolValue = xmlDocumentNode.parsed();   
348说明:如果全部的节点都已经被解析过了,则传回值为ture;如果有任何一个节点尚未被解析,传回值则为false。 
349
350使用范例: 
351
352以下的范例请参照随书光盘中的AppxA\LstA_43.htm:   
353currNode = xmlDoc.documentElement.childNodes.item(0);   
354boolValue = currNode.parsed();   
355alert(boolValue); 
356
357  
358removeChild 方法   
359\------------------- 
360
361会将指定的节点从节点清单中移除。 
362
363基本语法: 
364
365objDocumentNode = xmlDocumentNode.removeChild(oldChild);   
366说明:oldChild 为一个包含要被移除的节点对象。 
367
368使用范例: 
369
370以下的范例请参照随书光盘中的AppxA\LstA_44.htm:   
371objRemoveNode = xmlDoc.documentElement.childNodes.item(3);   
372alert(xmlDoc.xml);   
373xmlDoc.documentElement.removeChild(objRemoveNode);   
374alert(xmlDoc.xml); 
375
376  
377replaceChild 方法   
378\-------------------- 
379
380置换指定的旧子节点为提供的新子节点。 
381
382基本语法: 
383
384objDocumentNode = xmlDocumentNode.replaceChild(newChild,oldChild);   
385\-   
386说明:newChild 为包含新子节点的对象。如果此参数为null,则此旧子节点会被移除而不会被取代。oldChild 为包含旧子节点的对象。 
387
388使用范例: 
389
390以下的范例请参照随书光盘中的AppxA\LstA_45.htm:   
391objOldNode = xmlDoc.documentElement.childNodes.item(3);   
392objNewNode = xmlDoc.createComment("I've replaced the BCC element.");   
393alert(xmlDoc.xml);   
394xmlDoc.documentElement.replaceChild(objNewNode,objOldNode);   
395alert(xmlDoc.xml); 
396
397  
398selectNodes 方法   
399\-------------------- 
400
401传回所有符合提供样式(pattern)的节点。 
402
403基本语法: 
404
405objDocumentNodeList = xmlDocumentNode.selectNodes(patternString);   
406\-   
407说明:patternString 为一包含XSL 样式的字符串。此方法会传回节点清单对象,包含符合样式的节点。如果没有符合的节点,则传回空的清单列表。 
408
409使用范例: 
410
411以下的范例请参照随书光盘中的AppxA\LstA_46.htm:   
412objNodeList=xmlDoc.selectNodes("/");   
413alert(objNodeList.item(0).xml); 
414
415  
416selectSingleNode 方法   
417\-------------------------- 
418
419传回第一个符合样式的节点。 
420
421基本语法: 
422
423objDocumentNode = xmlDocumentNode.selectSingleNode(patternString);   
424说明:patternString 为一包含XSL 样式的字符串。此方法会传回第一个符合的节点对象,如果没有符合的节点,则传回null。 
425
426使用范例: 
427
428以下的范例请参照随书光盘中的AppxA\LstA_47.htm:   
429objNode = xmlDoc.selectSingleNode("EMAIL/BCC");   
430alert(objNode.xml); 
431
432  
433transformNode 方法   
434\---------------------- 
435
436使用提供的样式表来处理该节点及其子节点。 
437
438基本语法: 
439
440strTransformedDocument = xmlDocumentNode.transformNode(stylesheet);   
441说明:stylesheet 为一XML 文件或是片断包含负责节点转换工作的XSL 元素。此方法会传回一包含转换结果的字符串。 
442
443使用范例: 
444
445以下的范例请参照随书光盘中的AppxA\LstA_48.htm:   
446\-   
447var style = new ActiveXObject("Microsoft.XMLDOM");   
448style.load("LstA_49.xsl");   
449strTransform = xmlDoc.transformNode(style.documentElement);   
450alert(strTransform);   
451\---------------------------------------------------------------------------------   
452[Note]   
453想更进一步了解有关XSL 的细节,请参阅第8 章及第9 章。   
454\--------------------------------------------------------------------------------- 
455
456(三)、Document 对象的事件 
457
458  
459下面列出来的是Document 对象可用的事件:   
4601\. Ondataavailable   
4612\. Onreadystatechange 
462
463  
464Ondataavailable 事件   
465\---------------------- 
466
467此事件会在XML 文件有效时被触发。 
468
469基本语法: 
470
471此一事件有下面三种处理方式   
472. Inline:<element handler="" ondataavailable="" =="">;   
473. Event property:object.ondataavailable = handler;   
474. Named script:<script event="" for="" object="" ondataavailable="" ==""></script></element></div></div></div>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus