XML語言課件:第5章_XML文檔對象模型_第1頁
XML語言課件:第5章_XML文檔對象模型_第2頁
XML語言課件:第5章_XML文檔對象模型_第3頁
XML語言課件:第5章_XML文檔對象模型_第4頁
XML語言課件:第5章_XML文檔對象模型_第5頁
已閱讀5頁,還剩64頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2021-12-171第第5章章 XML文檔對象模型文檔對象模型o理解文檔對象模型的概念理解文檔對象模型的概念o熟悉文檔對象模型的基本知識熟悉文檔對象模型的基本知識o掌握客戶端加載掌握客戶端加載XML的方法的方法o掌握服務器端加載掌握服務器端加載XML的方法的方法o學會用學會用DOM編制編制JavaScript程序程序 2021-12-1721 DOM的基本概念的基本概念oDOM(Document Object Model,文檔對象模型,文檔對象模型)定義了訪問諸定義了訪問諸如如 XML 和和 XHTML 文檔的標準,是文檔的標準,是 W3C(萬維網聯盟)(萬維網聯盟) 推薦的標推薦的標準。準

2、。 oDOM是一個使程序和腳本有能力動態地訪問和更新文檔的內容、結構是一個使程序和腳本有能力動態地訪問和更新文檔的內容、結構以及樣式的與平臺和語言中立的接口。它定義了所有文檔元素的以及樣式的與平臺和語言中立的接口。它定義了所有文檔元素的對象和對象和屬性屬性,以及訪問它們的,以及訪問它們的方法方法。 oDOM由三部分組成:由三部分組成:n核心核心DOM:用于任何結構化文檔的標準模型:用于任何結構化文檔的標準模型 nHTML DOM:用于:用于HTML文檔的標準模型文檔的標準模型 nXML DOM:用于:用于XML文檔的標準模型文檔的標準模型 oHTML DOM:定義了所有:定義了所有 HTML

3、元素的對象和屬性,以及訪問它們元素的對象和屬性,以及訪問它們的方法的方法 oXML DOM:定義了所有:定義了所有 XML 元素的元素的對象和屬性對象和屬性,以及訪問它們的,以及訪問它們的方法方法。 2021-12-1732 XML DOM 節點節點o在在XML DOM中中XML文檔的每個成分都是一個文檔的每個成分都是一個節節點點 :n整個文檔是一個文檔節點整個文檔是一個文檔節點 n每個每個 XML 標簽是一個元素節點標簽是一個元素節點 n包含在包含在 XML 元素中的文本是文本節點元素中的文本是文本節點 n每一個每一個 XML 屬性是一個屬性節點屬性是一個屬性節點 n注釋屬于注釋節點注釋屬于

4、注釋節點 o特別注意:特別注意:n元素節點不包含文本,元素節點不包含文本,元素節點的文本是存儲元素節點的文本是存儲在文本節點中的在文本節點中的。 2021-12-174 Harry Potter J K. Rowling 2005 29.99 Everyday Italian Giada De Laurentiis 2005 30.00 XQuery Kick Start James McGovern Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan 2003 49.99根節點根節點 擁有四個擁有四個 子節點。子節點。第一個第一個

5、 節點擁有四個子節點:節點擁有四個子節點:上面每個節點都包含一個文本節點上面每個節點都包含一個文本節點Harry PotterJ K. Rowling“2005” 29.99“注意:注意:元素節點元素節點 ,擁有一個值為,擁有一個值為 “2005” 的文本節點。的文本節點。2005 不是不是 元素的值!元素的值!2021-12-1753 XML DOM 節點樹節點樹oXML DOM 把把 XML 文檔視為一棵節點樹。文檔視為一棵節點樹。o可通過這棵樹訪問所有節點,修改、刪除、創建節點。可通過這棵樹訪問所有節點,修改、刪除、創建節點。 o樹中的所有節點彼此之間都有關系。樹中的所有節點彼此之間都有

6、關系。 2021-12-1763.1 XML DOM節點間的關系節點間的關系o父、子和同胞節點用于描述父、子和同胞節點用于描述節點間關系節點間關系 o在節點樹中,頂端的節點成在節點樹中,頂端的節點成為根節點為根節點 o根節點之外的每個節點都有根節點之外的每個節點都有一個父節點一個父節點 o節點可以有任何數量的子節節點可以有任何數量的子節點點 o葉子是沒有子節點的節點葉子是沒有子節點的節點 o同胞節點是擁有相同的父節同胞節點是擁有相同的父節點點2021-12-1774 XML DOM 解析解析 o大多數瀏覽器都內建了供讀取和操作大多數瀏覽器都內建了供讀取和操作 XML 的的 XML 解析器。解析

7、器。o解析器把解析器把 XML 讀入內存,并把它轉換為可被讀入內存,并把它轉換為可被 JavaScript 訪問的訪問的 XML DOM 對象。對象。o所有的解析器都含有遍歷所有的解析器都含有遍歷 XML 樹、訪問、插入及樹、訪問、插入及刪除節點的函數。刪除節點的函數。 2021-12-1784.1 解析器加載解析器加載 XML文檔文檔o在訪問、處理在訪問、處理 XML 文檔之前,必須把它載入文檔之前,必須把它載入 XML DOM 對象。根據對象。根據瀏覽器的不同,加載的方法也稍有不同。瀏覽器的不同,加載的方法也稍有不同。/在在IE(IE5及更高版本及更高版本)中創建空的中創建空的XML文檔對

8、象文檔對象var xmlDoc=new ActiveXObject(Microsoft.XMLDOM); /關閉異步加載關閉異步加載, 確保在文檔完整加載之前確保在文檔完整加載之前, 解析器不會繼續執行腳本解析器不會繼續執行腳本 xmlDoc.async=false; /加載名為加載名為 books.xml 的文檔的文檔xmlDoc.load(books.xml); /在在Fireforx, Mozilla, Opera 中創建空的中創建空的XML文檔對象文檔對象var xmlDoc = document.implementation.createDocument (,null);/關閉異步加

9、載關閉異步加載, 確保在文檔完整加載之前確保在文檔完整加載之前, 解析器不會繼續執行腳本解析器不會繼續執行腳本 xmlDoc.async=false; /加載名為加載名為 books.xml 的文檔的文檔xmlDoc.load(books.xml); 2021-12-179DomImplementation對象對象o該對象可執行與文檔對象模型的任何與實例無關的操作。該對象可執行與文檔對象模型的任何與實例無關的操作。o可以通過可以通過Document 對象的對象的 implementation 屬性獲得對屬性獲得對 DomImplementation 對象的引用。對象的引用。 o在在Firefo

10、x, Mozilla, Opera等瀏覽器中用該對象的等瀏覽器中用該對象的 createDocument()方法創建一個新方法創建一個新XML DOM對象。對象。o語法:語法:createDocument( namespaceURI, qualifiedName, doctype )namespaceURI:指定根元素的名稱空間。:指定根元素的名稱空間。qualifiedName:指定名稱空間前綴。:指定名稱空間前綴。Doctype:創建:創建 XML DOM對象的對象的 DTD 對象。對象。 2021-12-17104.2 通用通用XML文檔加載函數文檔加載函數function loadXM

11、LDoc(dname) var xmlDoc=null; try /Internet Explorer xmlDoc=new ActiveXObject(Microsoft.XMLDOM) catch(e) try /Firefox, Mozilla, Opera, etc. xmlDoc=document.implementation.createDocument(,null) catch(e) alert(e.message) try xmlDoc.async=false; xmlDoc.load(dname); return(xmlDoc); catch(e) alert(e.messa

12、ge) return(xmlDoc);為了避免重復編寫代碼,可以編寫一個跨瀏覽器的通用的為了避免重復編寫代碼,可以編寫一個跨瀏覽器的通用的XML文檔加載函數備用:文檔加載函數備用:2021-12-17114.3 獲取解析器錯誤信息獲取解析器錯誤信息o在打開一個在打開一個 XML 文檔時,可能會發生解析器錯誤。文檔時,可能會發生解析器錯誤。通過通過parseError對象,可取回錯誤代碼、錯誤原對象,可取回錯誤代碼、錯誤原因和引起錯誤的行等等。因和引起錯誤的行等等。oparseError 對象的主要屬性:對象的主要屬性:nerrorCode: 返回一個長整型錯誤碼,返回一個長整型錯誤碼,0表示表

13、示無錯。無錯。nreason: 返回包含錯誤原因的字符串。返回包含錯誤原因的字符串。nline: 返回表示錯誤行號的長整型數。返回表示錯誤行號的長整型數。 2021-12-1712獲取錯誤信息的例子獲取錯誤信息的例子xmlDom=loadXMLDoc(error.xml);if (xmlDom.parseError.errorCode != 0) document.write(錯誤代碼錯誤代碼: );document.write (xmlDom.parseError.errorCode);document.write(錯誤原因錯誤原因: );document.write(xmlDom.pars

14、eError.reason);document.write(錯誤行號錯誤行號: );document.write(xmlDom.parseError.line)2021-12-17135 XML DOM 對象的屬性和方法對象的屬性和方法o屬性和方法為屬性和方法為 XML DOM 定義了編程的接口。定義了編程的接口。oXML DOM的的 documentElement 屬性是根節點。屬性是根節點。oXML DOM節點的主要屬性節點的主要屬性(x為任意的節點對象為任意的節點對象): nx.nodeName: x 的名稱;的名稱; nx.nodeValue: x 的值;的值; nx.parentNo

15、de: x 的父節點;的父節點; nx.childNodes: x 的子節點列表;的子節點列表; nx.attributes: x 的屬性節點列表;的屬性節點列表; oXML DOM節點的主要方法:節點的主要方法:nx.getElementsByTagName(name): 獲取以獲取以x為根的子樹中為根的子樹中帶有指定標簽名稱的所有元素,返回值為節點列表;帶有指定標簽名稱的所有元素,返回值為節點列表; nx.appendChild(node): 向向 x 插入子節點;插入子節點; nx.removeChild(node): 從從 x 刪除子節點;刪除子節點; 2021-12-1714oget

16、ElementsByTagName() 返回擁有指定標簽名的返回擁有指定標簽名的所有元素的列表(可以看成數組)。所有元素的列表(可以看成數組)。o語法語法:nnode.getElementsByTagName(tagname); o例例: x.getElementsByTagName(title); n僅返回僅返回 x x 節點下的所有節點下的所有 元素。元素。o例例: xmlDoc.getElementsByTagName(title); n返回返回 XML 文檔中的所有文檔中的所有 元素的列表元素的列表 。5.1 GetElementsByTagName2021-12-17155.2 節點

17、列表對象節點列表對象NodeListo當使用當使用getElementsByTagName() 方法時,會返回方法時,會返回 NodeList 對象。對象。oNodeList 對象表示節點的列表,以對象表示節點的列表,以 XML 中的相同順序排列。中的相同順序排列。o使用從使用從 0 開始的下標來訪問節點列表中的開始的下標來訪問節點列表中的節點。節點。xmlDoc=loadXMLDoc(books.xml); x=xmlDoc.getElementsByTagName (title); txt=x0.childNodes0.nodeValue; 2021-12-17165.3 NodeList

18、的的length屬性屬性oNodeList 對象會保持自身的更新。如果刪除或添加了元素,列表會對象會保持自身的更新。如果刪除或添加了元素,列表會自動更新調整。自動更新調整。 o節點列表的節點列表的 length 屬性是列表中節點的數目。屬性是列表中節點的數目。 下例是使用下例是使用 length 屬性來遍歷屬性來遍歷 元素的列表:元素的列表:xmlDoc=loadXMLDoc(books.xml); /變量變量x存放節點列表存放節點列表 x=xmlDoc.getElementsByTagName(title); for (i=0;ix.length;i+) document.write(xi.

19、childNodes0.nodeValue); document.write(); 2021-12-17175.4 XML DOM 的根節點的根節點documentElementoXML 文檔對象的文檔對象的 documentElement 屬性是根節點。屬性是根節點。 o遍歷根節點的子節點的代碼如下:遍歷根節點的子節點的代碼如下: xmlDoc=loadXMLDoc(books.xml); x=xmlDoc.documentElement.childNodes; /輸出每子節點的名稱輸出每子節點的名稱for (i=0;ix.length;i+) document.write(xi.nodeN

20、ame); document.write(); 2021-12-17186 XML DOM 節點信息節點信息o節點屬性:節點屬性:nodeName、nodeValue 以及以及 nodeType onodeName 屬性屬性nnodeName 屬性規定節點的名稱。屬性規定節點的名稱。nnodeName 是只讀的是只讀的 n元素節點的元素節點的 nodeName 與標簽名相同與標簽名相同 n屬性節點的屬性節點的 nodeName 是屬性的名稱是屬性的名稱 n文本節點的文本節點的 nodeName 永遠是永遠是 #text n文檔節點的文檔節點的 nodeName 永遠是永遠是 #document

21、 2021-12-17196.1 nodeValue 屬性屬性onodeValue 屬性屬性nnodeValue 屬性規定節點的值。屬性規定節點的值。n元素節點的元素節點的 nodeValue 是是 undefined n文本節點的文本節點的 nodeValue 是文本自身是文本自身 n屬性節點的屬性節點的 nodeValue 是屬性的值是屬性的值 o獲取元素的值獲取元素的值nx=xmlDoc.getElementsByTagName(title)0.childNodes0; ntxt=x.nodeValue; o更改元素的值更改元素的值nx=xmlDoc.getElementsByTagNa

22、me(title)0.childNodes0; nx.nodeValue=Easy Cooking; 2021-12-17206.2 nodeType 屬性屬性onodeType 屬性屬性nnodeType 屬性規定節點的類型。屬性規定節點的類型。nnodeType 是只讀的。是只讀的。o最重要的節點類型及其對應的數值是:最重要的節點類型及其對應的數值是:n元素元素: 1n屬性屬性: 2n文本文本: 3n注釋注釋: 8n文檔文檔: 92021-12-1721info=“”;if(node.nodeType=1) info=node.nodeName;if(node.nodeType=3) in

23、fo=node.nodeValue;2021-12-17226.3 屬性節點列表對象屬性節點列表對象attributes o元素節點的元素節點的 attributes 屬性返回屬性節點的列表,稱之屬性返回屬性節點的列表,稱之為為NamedNodeMap對象。對象。 n如果刪除或添加屬性,這個列表會自動更新調整。如果刪除或添加屬性,這個列表會自動更新調整。n屬性屬性length:屬性的數目。:屬性的數目。n可以通過從可以通過從0開始的下標訪問屬性節點開始的下標訪問屬性節點, 如:如:x.attributesi。n也可以通過方法也可以通過方法getNamedItem(attName):返回:返回指

24、定的屬性節點。指定的屬性節點。xmlDoc = loadXMLDoc(books.xml); x = xmlDoc.getElementsByTagName (book)0.attributes; document.write(x.getNamedItem (category).nodeValue); document.write( + x.length);2021-12-17237 XML DOM節點定位節點定位o可通過使用節點間的關系對節點進可通過使用節點間的關系對節點進行定位。行定位。 o在在 XML DOM 中,節點的關系被中,節點的關系被定義為節點的屬性:定義為節點的屬性:npare

25、ntNode: 父節點父節點nchildNodes: 子節點子節點nfirstChild: 第一個子節點第一個子節點nlastChild: 最后子節點最后子節點nnextSibling:下個同胞節點下個同胞節點npreviousSibling: 前一個同前一個同胞節點胞節點x=xmlDoc.getElementsByTagName(book)0; document.write(x.parentNode.nodeName); 2021-12-1724例例:遍歷遍歷XML文檔文檔books.xmlxmlDoc=loadXMLDoc(“books.xml”);/加載加載books.xml到到xmlD

26、oc中中x=xmlDoc.documentElement.childNodes;/把根節點的子節點放入變量把根節點的子節點放入變量x中中for (i=0; ix.length; i+) /對對第一層子節點的第一層子節點的每一個節點循環每一個節點循環 if (xi.nodeType=1) /是否為元素節點是否為元素節點 document.write(xi.nodeName);/輸出節點名稱輸出節點名稱 document.write(); y=xi.childNodes;/獲取子節點放入變量獲取子節點放入變量y中中 for (j=0;jy.length;j+) /對子節點循環對子節點循環 if (

27、yj.nodeType=1) /是否為元素節點是否為元素節點 document.write(yj.nodeName);輸出節點名稱輸出節點名稱 document.write(: ); document.write(yj.childNodes0.nodeValue);/輸出文本輸出文本 document.write(); /end of if(yj /end of for(j=0 document.write(); /end of if(xi/end of for(i=02021-12-17258 節點的操作節點的操作oXML DOM提供了對節點進行操作的屬性和方法。通過這提供了對節點進行操作的

28、屬性和方法。通過這些方法,可以獲取、更改、添加或刪除節點。些方法,可以獲取、更改、添加或刪除節點。o更改、添加或刪除節點方法主要有:更改、添加或刪除節點方法主要有:nsetAttribute():生成屬性節點或改變屬性節點的值。:生成屬性節點或改變屬性節點的值。nremoveChild():刪除子節點。:刪除子節點。nremoveAttribute():刪除屬性節點。:刪除屬性節點。ncreateElement():生成元素節點。:生成元素節點。ncreateTextNode():生成文本節點。:生成文本節點。nreplaceChild():替換子節點。:替換子節點。nappendChild(

29、):增加子節點。:增加子節點。ninsertBefore():插入節點。:插入節點。ncloneNode():克隆節點。:克隆節點。2021-12-17268.1 改變節點的值改變節點的值onodeValue 屬性用于改變節點值。屬性用于改變節點值。xmlDoc=loadXMLDoc(books.xml); x=xmlDoc.getElementsByTagName(title)0.childNodes0; x.nodeValue=Hello World; osetAttribute(attName,attVal) 方法用于改變屬性的值。方法用于改變屬性的值。xmlDoc=loadXMLDoc

30、(books.xml); x=xmlDoc.getElementsByTagName(book); x0.setAttribute(category,child); 2021-12-17278.2 刪除節點刪除節點oremoveChild(node) 方法刪除指定的子節點。方法刪除指定的子節點。xmlDoc=loadXMLDoc(books.xml); y=xmlDoc.getElementsByTagName(book)0; xmlDoc.documentElement.removeChild(y); oremoveAttribute(attName) 方法刪除指定的屬性。方法刪除指定的屬性

31、。xmlDoc=loadXMLDoc(books.xml); x=xmlDoc.getElementsByTagName(book); x0.removeAttribute(category); 2021-12-17288.3 創建節點創建節點ocreateElement(elName) 方法創建新的元素節點方法創建新的元素節點xmlDoc=loadXMLDoc(books.xml); newel=xmlDoc.createElement(edition); x=xmlDoc.getElementsByTagName(book)0; x.appendChild(newel); osetAttr

32、ibute(attName,attVal)用于創建新的屬性用于創建新的屬性xmlDoc=loadXMLDoc(books.xml); x=xmlDoc.getElementsByTagName(book); x0.setAttribute(edition,first); 2021-12-1729ocreateTextNode(text) 方法創建新的文本節點方法創建新的文本節點xmlDoc=loadXMLDoc(books.xml); newel=xmlDoc.createElement(edition); newtext=xmlDoc.createTextNode(first); newel

33、.appendChild(newtext); x=xmlDoc.getElementsByTagName(book)0; x.appendChild(newel); 2021-12-17308.4 替換節點替換節點oreplaceChild(new,old) 方法替換指定的子節點。方法替換指定的子節點。 xmlDoc=loadXMLDoc(books.xml); x=xmlDoc.documentElement; /創建一個創建一個 book 元素、一個元素、一個 title 元素,以及一個元素,以及一個 text 節點節點 newNode=xmlDoc.createElement(book)

34、; newTitle=xmlDoc.createElement(title); newText=xmlDoc.createTextNode(Hello World); /向向 title 節點添加文本節點節點添加文本節點 newTitle.appendChild(newText); /向向 book 節點添加節點添加 title 節點節點 newNode.appendChild(newTitle); y=xmlDoc.getElementsByTagName(book)0; /用這個新節點替換第一個用這個新節點替換第一個 book 節點節點 x.replaceChild(newNode,y);

35、 2021-12-17318.5 添加節點添加節點oappendChild(node) 方法向已存在的節點添加子節點方法向已存在的節點添加子節點 xmlDoc=loadXMLDoc(books.xml); newel=xmlDoc.createElement(edition); x=xmlDoc.getElementsByTagName(book)0; x.appendChild(newel);oinsertBefore(new,ref) 方法用于在指定的子節點之前插入節點方法用于在指定的子節點之前插入節點 xmlDoc=loadXMLDoc(books.xml); newNode=xmlDo

36、c.createElement(book); x=xmlDoc.documentElement; y=xmlDoc.getElementsByTagName(book)3; x.insertBefore(newNode,y); 2021-12-17328.6 克隆節點克隆節點ocloneNode(boolean) 方法創建指定節點的副本。方法創建指定節點的副本。ocloneNode() 方法有一個參數(方法有一個參數(true 或或 false)。該參數指示被復)。該參數指示被復制的節點是否包括原節點的所有屬性和子節點。制的節點是否包括原節點的所有屬性和子節點。xmlDoc=loadXMLDo

37、c(books.xml); oldNode=xmlDoc.getElementsByTagName(book)0; newNode=oldNode.cloneNode(true); xmlDoc.documentElement.appendChild(newNode);/Output all titles y=xmlDoc.getElementsByTagName(title); for (i=0;iy.length;i+) document.write(yi.childNodes0.nodeValue); document.write(); 2021-12-17338.7 XPath表達式求

38、值表達式求值oselectNodes() 方法用一個方法用一個 XPath 查詢選擇節點。查詢選擇節點。 o語法:語法:nnodeObject.selectNodes(XPath表達式表達式)o返回值:返回值:n包含了匹配查詢的節點的一個節點列表包含了匹配查詢的節點的一個節點列表NodeList 。o這是個特定于這是個特定于 IE 的計算的計算XPath 表達式的方法。表達式的方法。o使用該節點作為查詢的根節點,并且將結果作為一個節點使用該節點作為查詢的根節點,并且將結果作為一個節點列表返回。列表返回。o這個方法不僅適用于這個方法不僅適用于 XML 文檔中的節點,也適用于整個文檔中的節點,也適

39、用于整個 XML 文檔。文檔。 2021-12-1734Microsoft.XMLDOM2021-12-17358.8 執行執行XSLT轉換轉換otransformNode() 方法用方法用 XSLT 把一個節點轉換為一把一個節點轉換為一個字符串。個字符串。 o語法:語法:nnodeObject.transformNode(xsltObject) o返回值:返回值:n對該節點及其子孫應用指定的樣式而產生的文本。對該節點及其子孫應用指定的樣式而產生的文本。o這是個特定于這是個特定于 IE 的方法,根據一個的方法,根據一個 XSLT 樣式表指定的樣式表指定的規則來轉換一個規則來轉換一個 Node

40、及其子孫,并將結果作為一個未解及其子孫,并將結果作為一個未解析的字符串返回。析的字符串返回。o這個方法不僅適用于這個方法不僅適用于 XML 文檔中的節點,也適用于整個文檔中的節點,也適用于整個 XML 文檔。文檔。2021-12-1736Microsoft.XMLDOM 2021-12-1737例:在例:在XML DOM中用中用XSLT分頁顯示分頁顯示XML數據數據otransformNode方法方法不僅適不僅適用于文檔對象也適用于節點對用于文檔對象也適用于節點對象。該方法作用于節點對象時,象。該方法作用于節點對象時,就是對以該節點為根的子樹進就是對以該節點為根的子樹進行行XSLT轉換。轉換。

41、o利用利用selectNodes和和transformNode方法,可以方法,可以對對XML文檔中的一類節點進行文檔中的一類節點進行分頁顯示。分頁顯示。2021-12-1738 Harry Potter J K. Rowling 2005 29.99 Everyday Italian Giada De Laurentiis 2005 30.00 XQuery Kick Start James McGovern Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan 2003 49.99XML文件2021-12-1739 圖圖 書書 信信

42、 息息 書名書名: 分類分類: 語言語言: 作者作者: 年代年代: 價格價格: XSLT文件2021-12-1740HTML文件2021-12-1741 var xmlDoc; var xslDoc; var nodes; var maxLen=0; var idx=0; function init() xmlDoc=loadXMLDoc(books.xml); xslDoc=loadXMLDoc(msg_content.xsl); /nodes=xmlDoc.documentElement.childNodes; nodes=xmlDoc.selectNodes(/book); maxLen

43、=nodes.length-1; display(); JavaScript文件2021-12-1742 function display() if(maxLen=0) var node=nodesidx; content.innerHTML=node.transformNode(xslDoc); function gf() if(idx0) idx-=1; display(); function gb() if(idxmaxLen) idx+=1; display(); JavaScript文件2021-12-17438.9 XML有效性檢查有效性檢查o當用網頁瀏覽器(如當用網頁瀏覽器(如I

44、E、Firefox等)打開等)打開XML文檔時,文檔時,只對其是否為格式良好的只對其是否為格式良好的XML文檔進行檢查,并不對其是文檔進行檢查,并不對其是否為有效的否為有效的XML文檔進行檢查。文檔進行檢查。o在瀏覽器中要對在瀏覽器中要對XML文檔進行有效性檢查,需要設置文檔進行有效性檢查,需要設置XMLDOM的有效性檢查屬性為真,然后再加載的有效性檢查屬性為真,然后再加載XML文件:文件:Microsoft.XMLDOMxmlDom.validateOnParse=true;xmlDom.load(xmlFile);2021-12-1744XML Validationvar xmlDom =

45、 new ActiveXObject(Microsoft.XMLDOM);xmlDom.validateOnParse=true;xmlDom.async=false;xmlDom.load(code4_16.xml);if (xmlDom.parseError.errorCode != 0) emsg=錯誤代碼錯誤代碼: + xmlDom.parseError.errorCode + 錯誤原因錯誤原因: + xmlDom.parseError.reason + 錯誤行號錯誤行號: +xmlDom.parseError.line; document.write(emsg)2021-12-174

46、5XML DOM節點屬性表節點屬性表屬性屬性描述描述范例范例attributes該節點的所有屬性子節點的該節點的所有屬性子節點的NamedNodeMap 集合集合AttributeNode = Element.attributes.getNamedItem (amount);childNodes該節點的所有非屬性的該節點的所有非屬性的子節點的子節點的NodeList 集合集合FirstNode = Element.childNodes(0);firstChild該節點的第一個非屬性的子該節點的第一個非屬性的子節點節點FirstChildNode = Element.firstChild;las

47、tChild該節點的最后一個非屬性的該節點的最后一個非屬性的子節點子節點LastChildNode = Element.lastChild;nextSibling該節點的兄弟節點中的后一該節點的兄弟節點中的后一節點節點NextElement = Element.nextSibling;nodeName節點的名稱節點的名稱ElementName = Element.nodeName;nodeType表示該節點類型的數值碼表示該節點類型的數值碼NodeTypeCode = Node.nodeType;2021-12-1746XML DOM節點屬性表節點屬性表(續續) nodeTypeString包

48、含該節點類型的字符串包含該節點類型的字符串NodeTypeString = Node.nodeTypeString;nodeValue該節點的值該節點的值(如果不含值則為(如果不含值則為null)AttributeValue = Attribute.nodeValue;ownerDocument包含本節點的文件的根節點包含本節點的文件的根節點Document = Node.ownerDocument;parentNode該節點的父節點該節點的父節點ParentElement = Element.parentNode;previousSibling該節點的兄弟節點中的該節點的兄弟節點中的先前節點

49、先前節點PreviousElement = Element.previousSibling;text該節點與其后裔節點的該節點與其后裔節點的全部文字內容全部文字內容AllCharacterData = Element.text;xml該節點與其后裔節點的該節點與其后裔節點的全部全部XML內容內容XMLContent = Element.xml;2021-12-1747XML DOM創建各類節點的方法創建各類節點的方法 方方 法法描描 述述createElement(elemname)createElement(elemname)使用指定名稱使用指定名稱elemnameelemname創建元素節

50、點創建元素節點createAttribute(attrname)createAttribute(attrname)創建新屬性節點,參數屬性名稱創建新屬性節點,參數屬性名稱createCDATASection(text)createCDATASection(text)創建創建DATADATA塊,參數塊,參數texttext為文字內容為文字內容createComment(text)createComment(text)創建注釋文字節點,參數創建注釋文字節點,參數texttext為注釋內容為注釋內容createTextNode(text)createTextNode(text)創建文本節點,參數為文

51、字內容創建文本節點,參數為文字內容createEntityReferencecreateEntityReference(entityref)(entityref)創建實體參考對象,參數創建實體參考對象,參數entityrefentityref為實為實體參考名稱體參考名稱createProcessingInstructioncreateProcessingInstruction(target,text)(target,text)創建創建PIPI節點,參數節點,參數targettarget為為PIPI名稱,名稱,texttext為值為值2021-12-1748XML DOM節點的主要方法節點的主要

52、方法方法方法描述描述appendChild(newChild) 把節點把節點newChild加到當前節點的子節點加到當前節點的子節點的最后的最后.cloneNode(boolean) 克隆當前節點克隆當前節點.如果如果boolean為為true,則克則克隆的節點包含其子節點隆的節點包含其子節點;否則只克隆當前否則只克隆當前節點節點.hasChildNodes() 如果當前節點有子節點則返回如果當前節點有子節點則返回true.insertBefore(newNode,refNode) 在節點在節點refNode之前插入節點之前插入節點refNoderemoveChild(node) 刪除指定子節

53、點刪除指定子節點node.replaceChild(newNode,oldNode) 用節點用節點newNode去替換節點去替換節點oldNode2021-12-1749XML DOM節點的主要方法節點的主要方法(續續)方法方法描述描述selectNodes(pattern)從當前節點中獲取滿足從當前節點中獲取滿足XPath表達式表達式“pattern” 的所有子節點的列表的所有子節點的列表.selectSingleNode(pattern)從當前節點中獲取滿足從當前節點中獲取滿足XPath表達式表達式“pattern” 的所有子節點中的第一個子節的所有子節點中的第一個子節點點.transfo

54、rmNode(stylesheet) 用指定的樣式表單對當前節點及其子節點用指定的樣式表單對當前節點及其子節點進行轉換并返回轉換后的結果進行轉換并返回轉換后的結果.2021-12-17509 XMLHttpRequest對象對象oXMLHttpRequest 對象提供了在網頁加載后與對象提供了在網頁加載后與服務器進行通信的方法。服務器進行通信的方法。n在不重新加載頁面的情況下更新網頁在不重新加載頁面的情況下更新網頁 n在頁面已加載后向服務器請求數據在頁面已加載后向服務器請求數據 n在頁面已加載后從服務器接收數據在頁面已加載后從服務器接收數據 n在后臺向服務器發送數據在后臺向服務器發送數據 o所

55、有現代的瀏覽器都支持所有現代的瀏覽器都支持 XMLHttpRequest 對對象。象。o是是AJAX(Asynchronous JavaScript And XML)的核心。)的核心。 2021-12-17519.1 創建創建XMLHttpRequest對象對象o在所有現代瀏覽器中(包括在所有現代瀏覽器中(包括 IE 7):): nXmlhttp = new XMLHttpRequest();o在在 Internet Explorer 6 中:中:nXmlhttp = new ActiveXObject(Msxml2.XMLHTTP)o在在 Internet Explorer 5.5 中:中:

56、nXmlhttp = new ActiveXObject(Microsoft.XMLHTTP)2021-12-17529.2 XMLHttpRequest的主要方法的主要方法oopen()n初始化初始化 HTTP 請求參數,例如請求參數,例如 URL 和和 HTTP 方法,但是并不發送請求。方法,但是并不發送請求。osend()n發送發送 HTTP 請求,使用傳遞給請求,使用傳遞給 open() 方法方法的參數,以及傳遞給該方法的可選請求體。的參數,以及傳遞給該方法的可選請求體。2021-12-17539.2.1 XMLHttpRequest.open()o語法語法: open(method,

57、 url, async, username, password) nmethod 參數是用于請求的參數是用于請求的 HTTP 方法。方法。o 值包括 GET、POST 和 HEAD。nurl 參數是請求的主體。參數是請求的主體。nasync 參數指示請求是否異步地執行。參數指示請求是否異步地執行。o 如果這個參數是 false,請求是同步的,后續對 send() 的調用將阻塞,直到響應完全接收。o 如果這個參數是 true 或省略,請求是異步的,且通常需要一個 onreadystatechange 事件句柄。nusername 和和 password 參數是可選的,為參數是可選的,為 url

58、所所需的授權提供認證資格。需的授權提供認證資格。2021-12-17549.2.2 XMLHttpRequest.send()o語法語法: send(body) n如果通過調用如果通過調用 open() 指定的指定的 HTTP 方法是方法是 POST 或或 PUT,body 參數指定了請求體,作參數指定了請求體,作為一個字符串或者為一個字符串或者 Document 對象。對象。n如果請求體不是必須的話,這個參數就為如果請求體不是必須的話,這個參數就為 null。 2021-12-17559.3 XMLHttpRequest主要屬性主要屬性oreadyStatenHTTP請求的狀態請求的狀態.當

59、一個當一個XMLHttpRequest初次創初次創建時,這個屬性的值從建時,這個屬性的值從0開始,直到接收到完整的開始,直到接收到完整的HTTP響應,這個值增加到響應,這個值增加到4。 oresponseTextn目前為止從服務器接收到的響應體(不包括頭部),或目前為止從服務器接收到的響應體(不包括頭部),或者如果還沒有接收到數據的話,就是空字符串。如果者如果還沒有接收到數據的話,就是空字符串。如果 readyState 為為 4,這個屬性保存了完整的響應體。,這個屬性保存了完整的響應體。oresponseXMLn對請求的響應,解析為對請求的響應,解析為 XML 并作為并作為Document對

60、象對象返回。返回。 ostatusn由服務器返回的由服務器返回的HTTP狀態代碼,如狀態代碼,如 200 表示成功。表示成功。2021-12-17569.4 XMLHttpRequest事件句柄事件句柄oonReadyStateChange是一個事件句柄。是一個事件句柄。o它的值是一個函數的名稱,當它的值是一個函數的名稱,當 XMLHttpRequest 對象的狀態對象的狀態 readyState 屬性發生改變時,會觸發此函數。屬性發生改變時,會觸發此函數。o狀態狀態 readyState 屬性從屬性從 0 (uninitialized) 到到 4 (complete) 進行變化。僅在狀態為進行變化。僅在狀態為 4 時,時,我們

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論