From: http://soft.zdnet.com.cn/software_zone/2007/1004/535320.shtml
1、簡介
xmlDOM被設計爲可用於任何語言和任何操作系統。藉助DOM,程序員可以創建xml文檔、遍歷其結構,增、改、刪其元素。DOM將整個xml文檔視作一棵樹,文檔級的元素是樹的根
2.結構:
舉一實例
分析:
Document節點:即文檔對象,樹的最高節點,對整個文檔進行操作的入口
Element和Attribute節點:這些結點對象是對整個文檔進行操作的入口
Text節點類型,Text對象表達了元素或者屬性的文本內容,Text節點不再包含任何子節點
集合索引:對節點按指定方式進行遍歷,索引參數從0開始
3.Document對象
屬性:
async 屬性 | |||
作 用 |
async 屬性表示是否允許異步的下載。 | ||
基本語法 |
boolValue = xmlDocument.async;xmlDocument.async = boolValue; |
||
說 明 |
布爾值是可擦寫的(read/write),如果准許異步下載,值爲True;反之則爲False。 |
||
範 例 |
attribute 屬性 | |||
作 用 |
傳回目前節點的屬性列表。 | ||
基本語法 |
objAttributeList = xmlNode.attributes; |
||
說 明 |
傳回一個物件。如果此節點不能包含屬性,則傳回空值。 |
||
範 例 |
objAttList = xmlDoc.documentElement.attributes; |
childNodes 屬性 | |||
作 用 |
傳回一個節點清單,包含該節點所有可用的子節點。 | ||
基本語法 |
objNodeList=node.childNodes; |
||
說 明 |
傳回一個物件。假如這節點沒有子節點,傳回null。 |
||
範 例 |
objNodeList = xmlDoc.childNodes; |
doctype 屬性 | |||
作 用 |
傳回文件型態節點,包含目前文件的DTD。這節點是一般的文件型態宣告,例如,節點,名爲EMAIL 的節點物件會被傳回。 | ||
基本語法 |
objDocType=xmlDocument.doctype; |
||
說 明 |
傳回一個對象,這個屬性是隻讀的。假如這文件不包含DTD,會傳回null。 |
||
範 例 |
objDocType = xmlDoc.doctype; |
documentElement 屬性 | |||
作 用 |
確認xml 文件的根(Root)節點。 | ||
基本語法 |
objDoc=xmlDocument.documentElement; |
||
說 明 |
回一個在單一根文件元素中包含數據的對象。此屬性可讀/寫,如果文件中不包含根節點,將傳回null。 |
||
範 例 |
objDocRoot = xmlDoc.documentElement; |
firstChild 屬性 | |||
作 用 |
確認在目前節點中的第一個子元素。 | ||
基本語法 |
objFirstChild = xmlDocNode.firstChild ; |
||
說 明 |
此屬性只讀且會傳回一對象,如果節點中沒有包含第一個子元素,將傳回null。 |
||
範 例 |
objFirstChild = xmlDoc.documentElement.firstChild; |
implementation 屬性 | |||
作 用 |
DOM 應用程序能使用其它實作中的對象。implementation 屬性確認目前xml 文件的DOMimplementation 對象。 | ||
基本語法 |
objImplementation = xmlDocument.implementation; |
||
說 明 |
此屬性只讀且傳回一個對象。 |
||
範 例 |
objImp = xmlDoc.implementation; |
parseError 屬性 | |||
作 用 |
傳回一個DOM 解析錯誤對象,此對象描述最後解析錯誤的訊息。 | ||
基本語法 |
objParseErr = xmlDocument.parseError; |
||
說 明 |
此屬性是隻讀的。如果沒有錯誤發生,將傳回0。 |
||
範 例 |
objParseErr = xmlDoc.parseError; |
previousSibling 屬性 | |||
作 用 |
傳回目前節點之前的兄弟節點。 | ||
基本語法 |
objPrevSibling = xmlDocument.previousSibling; |
||
說 明 |
傳回一個對象,這個屬性是隻讀的。若該節點沒有包含前面的兄弟節點,會傳回null。 |
||
範 例 |
objPrevSibling = |
readyState 屬性 | |||
作 用 |
傳回xml 文件資料的目前狀況。 | ||
基本語法 |
intState = xmlDocument.readyState; |
||
說 明 |
|
||
範 例 |
alert("The readyState property is " + xmlDoc.readyState); |
url 屬性 | |||
作 用 |
傳回最近一次加載xml 文件的URL。 | ||
基本語法 |
strDocUrl = xmlDocument.url; |
||
說 明 |
這個屬性是隻讀的,傳回最近一次加載成功文件的URL,若文件僅存在主存儲器中(表示該文件並非由外部檔案加載),則傳回null。 |
||
範 例 |
alert(xmlDoc.url); |
validateOnParse 屬性 | |||
作 用 |
告訴解析器文件是否有效。 | ||
基本語法 |
boolValidate = xmlDocument.validateOnParse; |
||
說 明 |
此屬性是可擦寫的。如果傳回值爲true,表示文件被解析時被確認是有效的。如果傳回false,表示文件是無效的,並被認爲只是標準格式的(well-formed)文件。 |
||
範 例 |
xmlDoc.validateOnParse = true; |
方法:
作 用 |
abort 方法取消一個進行中的異步下載 |
基本語法 |
xmlDocument.abort(); |
說 明 |
如果這個方法在異步下載時被呼叫,所有的解析動作會停止,而且在內存中的文件會被釋放。 |
範 例 |
xmlDocument |
createAttribute 方法 | |||
作 用 |
建立一個指定名稱的屬性。 | ||
基本語法 |
xmlDocument.createAttribute(name); |
||
說 明 |
name 是被建立屬性的名稱。 |
||
範 例 |
objNewAtt = xmlDoc.createAttribute("encryption"); |
createCDATASection 方法 | |||
作 用 |
|||
基本語法 |
xmlDocument.createCDATASection(data); |
||
說 明 |
date 是一個字符串,且包含了被置放在CDATA 的資料。 |
||
範 例 |
objNewCDATA = xmlDoc.createCDATASection("This is a CDATA Section"); |
createComment 方法 | |||
作 用 |
|||
基本語法 |
xmlDocument.createComment(data); |
||
說 明 |
data 是一個字符串,且包含了被置放在批註的資料。 |
||
範 例 |
objNewComment = xmlDoc.createComment("This is a comment"); |
createDocumentFragment 方法 | |||
作 用 |
建立一個空的文件片斷對象。 | ||
基本語法 |
xmlDocument.createDocumentFragment(); |
||
說 明 |
一個新的文件片斷被建立,但沒有加到文件樹中。要加入片斷到文件樹中,必須使用插入方法,例如insertBefore、replaceChild 或appendChild。 |
||
範 例 |
objNewFragment = xmlDoc.createDocumentFragment(); |
createElement 方法 | |||
作 用 |
建立一個指定名稱的元素。 | ||
基本語法 |
xmlDocument.createElement(tagName); |
||
說 明 |
tagName 是一個區分大小寫的字符串來指定新元素名稱。 |
||
範 例 |
objNewElement = xmlDoc.createElement("TO"); |
createEntityReference 方法 | |||
作 用 |
建立一個參照到指定名稱的實體。 | ||
基本語法 |
xmlDocument.createEntityReference(name); |
||
說 明 |
name 是一個區分大小寫的字符串,來指定新實體參照的名稱。一個新的實體參照被建立,但是並沒有被加到文件樹中。若要將實體參照加到文件樹中,必須使用一種插入方法,例如:insertBefore,replaceChild,或appendChild。 |
||
範 例 |
objNewER = xmlDoc.createEntityReference("eRef"); |
createNode 方法 | |||
作 用 |
建立一個指定型態、名稱,及命名空間的新節點。 | ||
基本語法 |
xmlDocument.createNode(type, name, nameSpaceURI); |
||
說 明 |
type 用來確認要被建立的節點型態,name 是一個字符串來確認新節點的名稱,命名空間的前綴則是選擇性的。nameSpaceURI 是一個定義命名空間URI 的字符串。如果前綴被包含在名稱參數中,此節點會在nameSpaceURI 的內文中以指定的前綴建立。如果不包含前綴,指定的命名空間會被視爲預設的命名空間。 |
||
範 例 |
objNewNode = xmlDoc.createNode(1, "TO", ""); |
createProcessingInstruction 方法 | |||
作 用 |
建立一個新的處理指令,包含了指定的目標和數據。 | ||
基本語法 |
xmlDocument.createProcessingInstruction(target, data); |
||
說 明 |
target 是表示目標、名稱或處理指令的字符串。Data 是表示處理指令的值。一個新的處理指令被建立,但是並沒有加到文件樹中。要把處理指令加到文件樹中,必須使用插入方法,例如:insertBefore、replaceChild,或是appendChild。 |
||
範 例 |
objNewPI =xmlDoc.createProcessingInstruction(‘xml’, ‘version="1.0"’); |
createTextNode 方法 | |||
作 用 |
建立一個新的text 節點,幷包含指定的數據。 | ||
基本語法 |
xmlDocument.createTextNode(data); |
||
說 明 |
data 是一個代表新text 節點的字符串。一個新的text 節點被建立,但是沒有加到文件樹中。若要將節點加到文件樹中,必須使用插入方法,例如:insertBefore,replaceChild或appendChild。 |
||
範 例 |
objNewTextNode = xmlDoc.createTextNode("This is a text node."); |
getElementsByTagName 方法 | |||
作 用 |
傳回指定名稱的元素集合。 | ||
基本語法 |
objNodeList = xmlDocument.getElementsByTagName(tagname); |
||
說 明 |
tagname 是一個字符串,代表找到的元素卷標名稱。使用tagname "*"傳回文件中所有找到的元素。 |
||
範 例 |
objNodeList = xmlDoc.getElementsByTagName("*"); |
load 方法 | |||
作 用 |
表示從指定位置加載的文件。 | ||
基本語法 |
boolValue = xmlDocument.load(url); |
||
說 明 |
url 包含要被加載檔案的URL 的字符串。假如文件加載成功,傳回值即爲true。若加載失敗,傳回值爲false。 |
||
範 例 |
loadxml 方法 | |||
作 用 |
加載一個xml 文件或字符串的片斷。 | ||
基本語法 |
|||
說 明 |
|||
範 例 |
xmlString = "<GREETING><MESSAGE>Hello!</MESSAGE></GREETING>"; |
nodeFromID 方法 | ||||
作 用 |
傳回節點ID 符合指定值的節點。 | |||
基本語法 |
||||
說 明 |
idString 是一個包含ID 值的字符串。符合的節點必定是ID 型態。若符合,將傳回一個對象;若操作失敗,則傳回null。 |
|||
範 例 |
objDocumentNode = xmlDoc.nodeFromID("TO"); |
selectNodes 方法 | |||
作 用 |
傳回所有符合提供樣式(pattern)的節點。 | ||
基本語法 |
objDocumentNodeList = xmlDocumentNode.selectNodes(patternString); |
||
說 明 |
patternString 爲一包含XSL 樣式的字符串。此方法會傳回節點清單對象,包含符合樣式的節點。如果沒有符合的節點,則傳回空的清單列表。 |
||
範 例 |
objNodeList=xmlDoc.selectNodes("/"); |
4.Node對象
Node對象表示樹中的一個節點
屬性:
lastChild 屬性 | |||
作 用 |
確認目前節點中最後的子元素。 | ||
基本語法 |
objLastChild = xmlDocNode.lastChild; |
||
說 明 |
此屬性只讀且傳回一個對象。如果節點中沒有包含最後子元素,將傳回null。 |
||
範 例 |
objLastChild = xmlDoc.documentElement.lastChild; |
nextSibling 屬性 | |||
作 用 |
在目前文件節點的子節點列表中傳回下一個兄弟節點。 | ||
基本語法 |
objNextSibling = xmlDocNode.nextSibling; |
||
說 明 |
此屬性是隻讀且傳回一個對象。如果節點中沒有包含其它的相關節點,會傳回null。 |
||
範 例 |
objSibling = xmlDoc.documentElement.childNodes.item(1) .nextSibling; |
nodeName 屬性 | |||
作 用 |
傳回代表目前節點名稱的字符串。 | ||
基本語法 |
strNodeName = xmlDocNode.nodeName ; |
||
說 明 |
傳回一個字符串。這個屬性是隻讀的,傳回元素名稱、屬性或實體參照。 |
||
範 例 |
strNodeName = xmlDoc.documentElement.nodeName; |
nodeType 屬性 | |||
作 用 |
辨識節點的DOM 型態。 | ||
基本語法 |
numNodeType = xmlDocNode.nodeType ; |
||
說 明 |
|
||
範 例 |
numNodeType = xmlDoc.documentElement.nodeType; |
nodeValue 屬性 | |||
作 用 |
傳回指定節點相關的文字。這並非一個元素中數據的值,而是與一個節點相關且未解析的文字,就像一個屬性或者一個處理指令。 | ||
基本語法 |
varNodeValue = xmlDocNode.nodeValue; |
||
說 明 |
傳回的文字代表以節點的nodeType 屬性爲主的型態值。(請參考附錄中的nodeType 屬性。)因爲節點型態可能是幾種數據型態中的一種,傳回值也因此有差異。傳回null 的節點型態有:DOCUMENT、ELEMENT、DOCUMENT TYPE、DOCUMENT FRAGMENT、ENTITY、ENTITY REFERENCE,和NOTATION。此屬性可擦寫。 |
||
範 例 |
varNodeValue = xmlDoc.documentElement.nodeValue; |
ondataavailable 屬性 | |||
作 用 |
指定一個事件來處理ondataavailable 事件。 | ||
基本語法 |
xmlDocNode.ondataavailable = value; |
||
說 明 |
|||
範 例 |
xmlDoc.ondataavailable = alert("Data is now available."); |
onreadystatechange 屬性 | |||
作 用 |
指定一個事件來處理onreadystatechange 事件。這個事件能辨識readyState 屬性的改變。 | ||
基本語法 |
xmlDocNode.onreadystatechange = value; |
||
說 明 |
此屬性是唯寫的,允許文件作者指定當readyState 屬性改變時呼叫事件。 |
||
範 例 |
xmlDoc.onreadystatechange = |
xml 屬性 | |||
作 用 |
傳回指定節點的xml 描述和所有的子節點。 | ||
基本語法 |
|||
說 明 |
此屬性是隻讀的。 |
||
範 例 |
方法:
AppendChild 方法 | |||
作 用 |
加上一個節點當作指定節點最後的子節點。 | ||
基本語法 |
xmlDocumentNode.appendChild(newChild); |
||
說 明 |
newChild 是附加子節點的地址。 |
||
範 例 |
docObj = xmlDoc.documentElement; |
cloneNode 方法 | |||
作 用 |
|||
基本語法 |
xmlDocumentNode.cloneNode(deep); |
||
說 明 |
deep 是一個布爾值。如果爲true,此節點會複製以指定節點發展出去的所有節點。如果是false,只有指定的節點和它的屬性被複制。 |
||
範 例 |
currNode = xmlDoc.documentElement.childNodes.item(1); |
haschildnodes 方法 | |||
作 用 |
如果指定的節點有一個或更多子節點,傳回值爲true。 | ||
基本語法 |
boolValue = xmlDocumentNode.hasChildNodes() ; |
||
說 明 |
如果此節點有子節點傳回值爲true,否則傳回false 值。 |
||
範 例 |
boolValue = xmlDoc.documentElement.hasChildNodes(); |
insertBefore 方法 | |||
作 用 |
在指定的節點前插入一個子節點。 | ||
基本語法 |
objDocumentNode = xmlDocumentNode.insertBefore(newChild,refChild); |
||
說 明 |
newChild 是一個包含新子節點地址的對象,refChild 是參照節點的地址。新子節點被插到參照節點之前。如果refChild 參數沒有包含在內,新的子節點會被插到子節點列表的末端。 |
||
範 例 |
objRefNode = xmlDoc.documentElement; |
parsed 方法 | |||
作 用 |
會驗證該指定的節點(node)及其衍生的子節點(descendants)是否已被解析過。 | ||
基本語法 |
boolValue = xmlDocumentNode.parsed(); |
||
說 明 |
如果全部的節點都已經被解析過了,則傳回值爲ture;如果有任何一個節點尚未被解析,傳回值則爲false。 |
||
範 例 |
currNode = xmlDoc.documentElement.childNodes.item(0); |
removeChild 方法 | |||
作 用 |
會將指定的節點從節點清單中移除。 | ||
基本語法 |
objDocumentNode = xmlDocumentNode.removeChild(oldChild); |
||
說 明 |
oldChild 爲一個包含要被移除的節點對象。 |
||
範 例 |
objRemoveNode = xmlDoc.documentElement.childNodes.item(3); |
replaceChild 方法 | |||
作 用 |
置換指定的舊子節點爲提供的新子節點。 | ||
基本語法 |
objDocumentNode = xmlDocumentNode.replaceChild(newChild,oldChild); |
||
說 明 |
newChild 爲包含新子節點的對象。如果此參數爲null,則此舊子節點會被移除而不會被取代。oldChild 爲包含舊子節點的對象。 |
||
範 例 |
objOldNode = xmlDoc.documentElement.childNodes.item(3); |
selectSingleNode 傳回第一個符合樣式的節點。 | |||
作 用 |
傳回第一個符合樣式的節點。 | ||
基本語法 |
objDocumentNode = xmlDocumentNode.selectSingleNode(patternString); |
||
說 明 |
patternString 爲一包含XSL 樣式的字符串。此方法會傳回第一個符合的節點對象,如果沒有符合的節點,則傳回null。 |
||
範 例 |
objNode = xmlDoc.selectSingleNode("EMAIL/BCC"); |
transformNode 方法 | |||
作 用 |
使用提供的樣式表來處理該節點及其子節點。 | ||
基本語法 |
strTransformedDocument = xmlDocumentNode.transformNode(stylesheet); |
||
說 明 |
stylesheet 爲一xml 文件或是片斷包含負責節點轉換工作的XSL 元素。此方法會傳回一包含轉換結果的字符串。 |
||
範 例 |
var style = new ActiveXObject("Microsoft.xmlDOM"); |