1 / 50

第 9 章 XML DOM 物件的使用

第 9 章 XML DOM 物件的使用. 簡介 XML DOM 物件. 什麼是 DOM DOM 是 Document Object Model 的縮寫,譯為文件物件模型。 Document 物件的用途,在於以物件集合的方式,呈現出文件內容,並提供程式一個操作文件的程式介面,而這裡所謂的操作方式,大致上包含了節點的新增、刪除、修改、節點,以及在文件中搜尋節點 … 等動作。而 XML DOM 則是用於處理 XML 文件的文件物件模型。

zev
Télécharger la présentation

第 9 章 XML DOM 物件的使用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第 9 章 XML DOM物件的使用

  2. 簡介XML DOM物件 • 什麼是DOMDOM是Document Object Model的縮寫,譯為文件物件模型。Document物件的用途,在於以物件集合的方式,呈現出文件內容,並提供程式一個操作文件的程式介面,而這裡所謂的操作方式,大致上包含了節點的新增、刪除、修改、節點,以及在文件中搜尋節點…等動作。而XML DOM則是用於處理XML文件的文件物件模型。 • W3C的DOM標準1998年W3C公佈了DOM物件模型標準層級1的規格書(Document Object Model (DOM) Level 1 Specification Version 1.0)。該規格書定義了DOM介面內各種介面組(Interface Set)。整份文件包含兩個主要的部份,一是DOM核心部份(DOM Core),另一是HTML部份(DOM HTML)。

  3. 簡介XML DOM物件 • W3C的XML DOM與MSXML介面DOM Core中,亦運用樹狀結構表達XML文件中的資料,這個結構稱之為DOM Tree。以下為W3C中,DOM Tree所包含的元素。 • Document • Document Fragment • Document Type • Element • Attribute • Text • Entity • Entity Reference • Process Instruction • Comment • CDATA Section • Notation

  4. 簡介XML DOM物件 • MSXML實做的DOM物件,將以Document(IXMLDOMDocument)、Node(IXMLDOMNode)、NodeLists(IXMLDOMNodeLists)這三個介面,架構出整個DOM Tree,如下圖所示。

  5. 簡介XML DOM物件 • 下表為MSXML所實做之DOM與W3C標準的對照。

  6. 載入XML文件 - 建立Document物件與載入XML文件 • 在客戶端建立Document物件在客戶端用VBScript語言,建立Document物件的語法如下: Set 物件變數 = CreateObject("Msxml2.DOMDocument") • 在客戶端用JavaScript(JScript)語言建立Document物件的語法如下: 物件變數 = new ActiveXObject("Msxml2.DOMDocument")

  7. 載入XML文件 - 建立Document物件與載入XML文件 • 在伺服端建立Document物件在伺服端用VBScript語言,建立Document物件的語法如下: Set Document物件變數 = Server.CreateObject ("Msxml2.DOMDocument") • 在伺服端用JavaScript(JScript)語法建立Document物件的語法如下: 物件變數 = Server.CreateObject ("Msxml2.DOMDocument")

  8. 載入XML文件 - 載入XML文件 • 完成Document物件的建立後,將再利用Document物件的load()方法載入檔案,語法如下: Document物件.load(檔案路徑) • 以下敘述將使用VBScript語言,從伺服端載入book.xml檔。

  9. 載入XML文件 - 利用<XML>標籤載入XML文件 • 利用<XML>標籤於HTML網頁建立XML文件直接在HTML網頁中,運用<XML>標籤建立XML文件的語法如下: <XML id=物件變數名稱> XML文件 </XML> • 以下敘述將在HTML網頁內定義XML文件,並於Script語言中,運用objDOM變數引用。

  10. 載入XML文件 - 利用<XML>標籤載入XML文件 • 在HTML的Script中,欲取得XML文件的內容時,必須運用DOM物件的xml屬性,語法如下: DOM物件.xml • 以下敘述將把objDOM物件的文件內容設定給xmlcode物件的innerText屬性。

  11. 載入XML文件 - 利用<XML>標籤載入XML文件 • 利用<XML>標籤載入運用<XML>標籤從伺服端,載入XML文件的語法如下: <XML id=物件變數名稱 scr=檔案來源URL></XML>

  12. 載入XML文件 - 儲存XML文件 • 欲儲存XML文件時,可使用document物件的save()方法,語法如下: Document物件.save(儲存目標)

  13. 載入XML文件 - 取得XML文件中的節點 • 當XML文件被載入DOM物件後,將以樹狀結構呈現XML文件內的資料。在MSXML中,Document物件本身是一個代表XML文件的元素,也是建立XML文件時,必須第一個建立的物件。 • Document物件的documentElement屬性,則為XML文件的文件元素(Document Element)。每個元素若有下一層元素時,這些元素將被包含於一個節點集中,並可運用childNodes屬性引用。

  14. 載入XML文件 - 取得XML文件中的節點 • 在MSXML中,整份文件可表達如下:

  15. 載入XML文件 - 取得XML文件中的節點 • 以下語法將引用至XML文件的文件元素。 Document物件. documentElement • 以下敘述則取得文件元素下一層元素所組成的節點集。 Document物件. documentElement.childNodes • 若欲取得節點集中的元素時,可使用item()方法,語法如下: NodeLists物件.item(索引值)

  16. 載入XML文件 - 取得XML文件中的節點 • 以下敘述將取得文件節點下一層節點的第1個節點,objDOM物件變數將引用至某Document物件。 • 以下敘述將取得文件節點下第一層節點中,第1個節點的下一層節點中第2個節點,objDOM為一Document物件。

  17. 節點集的操作(NodeList介面)- 簡介NodeList介面 • 在DOM物件中,某節點若包含數個子節點時,透過childNodes屬性將可取得由節點所有子節點組成的節點集物件。 • 節點集物件的型態為DOM物件的NodeList介面,用於操作容納數個節點的節點集物件。

  18. 節點集的操作(NodeList介面)- 利用for迴圈輸出節點 • 欲輸出節點集中的節點時,可以利用for迴圈配合節點集的長度(也就是節點的個數),並利用NodeList物件的item()方法,依序取得節點集內的節點。 • 以下語法將取得節點集內節點的個數。 NodeList物件變數.length • 以下語法將取得節點集內的節點。 NodeList物件變數.item(索引值)

  19. 節點集的操作(NodeList介面)- 利用for迴圈輸出節點 • 以下敘述將取得節點集中所有節點,並以curNode引用。

  20. 節點集的操作(NodeList介面)- 利用for each迴圈輸出節點 • 在VBScript中,除了可以利用for迴圈外,還可以運用for each迴圈。在下面的for each迴圈中,將運用curNode做為引用childNodes內節點的變數。語法如下: for each 物件變數 In 節點集物件 …… next • 以下敘述將運用for each迴圈,列出節點集內的節點。

  21. 節點的操作(Nodes介面)- 簡介Node介面 • 在DOM物件的觀念中,XML文件內,不論是元素、屬性或元素的內容都被視為節點(Node)。 • Node介面在DOM物件內,是非常重要的介面。

  22. 節點的操作(Nodes介面)- 節點的取得 • Node物件提供了一些屬性,可以協助使用者,取得與引用節點相關的節點,說明如下表。

  23. 節點的操作(Nodes介面)- 節點的取得 • 各屬性所代表意義說明如下圖。

  24. 節點的操作(Nodes介面)- 節點的取得 • nodeName屬性依據不同類型的節點,傳回不同的資料,如:若節點類型為元素(Element),則會傳回標籤的名稱。 • text屬性傳回節點包含之所有節點的內容。 • xml屬性取得節點的內容,並包含節點的XML標籤。

  25. 節點的操作(Nodes介面)- 節點的類型 • 由於DOM物件的觀念中,在XML文件內,不論是元素、屬性或者元素的內容,都將被視為節點。 • 節點內容容納的是哪種類型的資料,可運用nodeType屬性取得。 • 欲取得代表節點型態的字串,可透過nodeTypeString屬性取得。

  26. 節點的操作(Nodes介面)- 運用XPath選取節點 • 選取單一節點欲選取單一節點時,可配合XPath語法,呼叫selectSingleNode()方法,即可從XML文件的某個節點下,選取出XPath指定的子節點。 Node物件變數.selectSingleNode(XPath敘述) • 回傳值為選取到的子節點物件,當XPath敘述可選取數個節點時,則將傳回第一個被選取到的節點。若未選取到任何子節點時,將傳回null值。

  27. 節點的操作(Nodes介面)- 運用XPath選取節點 • 以下敘述將選取documentElement節點下第1個book元素的tilte元素,並由selNode物件變數引用。

  28. 節點的操作(Nodes介面)- 運用XPath選取節點 • 選取數個節點若運用XPath語法選取出數個節點時,則必須呼叫selectNodes()方法,即可從XML文件中,選取出XPath指定的子節點。 Node物件變數.selectNodes(XPath敘述) • 回傳值為選取到的節點,所組成之節點集物件,若未選取到任何節點,則傳回一個空的節點集物件,在程式中,可判斷節點集的length屬性是否0,加以斷定。

  29. 節點的操作(Nodes介面)- 運用XPath選取節點 • 以下敘述將選取XML文件之文件元素下的所有book元素。 • 以下敘述則將利用XPath敘述,配合selectNodes()方法,篩選出XML文件中,isbn屬性為957-0462-42-6的book元素。

  30. 節點的操作(Nodes介面)- 運用元素標籤取得節點 • 若想取得XML文件內,某特定名稱的節點時,可以運用Document物件的getElementsByTagName()方法。語法如下: Document物件變數.getElementsByTagName (標籤名稱) • 回傳值為完成代表新元素的節點集物件。

  31. 節點的操作(Nodes介面)- 新增節點 • 利用DOM物件,將節點新增至XML文件的步驟如下: STEP 1、運用DOMDoocument物件的CreateElement()方法,建立欲新增的元素。 STEP 2、運用DOMDoocument物件的createTextNode()方法,建立包含欲新增元素之內容的文字節點。 STEP 3、呼叫節點物件(Node物件)的appendChild()方法,將於STEP 2完成建立的文字節點,加到STEP 1建立的元素。 STEP 4、從XML文件內,取得欲加入新節點的節點。 STEP 5、呼叫節點物件(Node物件)的appendChild()方法、insertBefore()方法或insertAfter()方法,完成節點的新增。

  32. 節點的操作(Nodes介面)- 新增節點 • DOMDocument物件createElement()方法以下是DOMDocument物件createElement()方法的語法說明: Document物件變數.createElement(標籤名稱) • 回傳值為完成代表新元素的節點物件。 • 以下敘述將建立名為penname的節點,並由objNewNode引用。

  33. 節點的操作(Nodes介面)- 新增節點 • DOMDocument物件createTextNode()方法以下是DOMDocument物件createTextNode()方法的語法說明: Document物件變數.createTextNode (內容字串) • 回傳值為完成代表文字節點的節點物件。 • 以下敘述將建立一個內容為『位元文化』的文字節點,並由objTextNode引用。

  34. 節點的操作(Nodes介面)- 新增節點 • Node物件appChild()方法以下是Node物件appChild()方法的語法說明: Node物件變數.appChild(節點物件) • 回傳值為新增至節點的節點物件。 • 以下敘述將把objTextNode新增至objNewNode,其中objTextNode與objNewNode均為引用至節點物件的變數。

  35. 節點的操作(Nodes介面)- 新增節點 • Node物件insertBefore()方法、insertAtfter()方法appendChild()方法僅是將新增的元素,加到特定元素所包含的最後一個子元素。若欲指定新增節點的位置,則必須運用insertBefore()方法或insertAfter()方法,將元素新增到參考節點之前或之後。兩方法的語法如下: Node物件變數.insertBefore (新增節點, 參考節點) Node物件變數.insertAfter (新增節點, 參考節點) • 回傳值為新增至XML文件的元素。 • 以下敘述將在objCurNode節點包含的第2個子節點前,插入objNewNode物件變數引用的節點。

  36. 節點的操作(Nodes介面)- 刪除節點 • 子節點的刪除從XML文件刪除某元素的子節點之步驟如下: STEP 1、取得欲刪除節點的上一層節點。 STEP 2、取得欲刪除的節點。 STEP 3、呼叫節點物件(Node物件)的removeChild()方法,將於STEP 2取得的節點,從STEP 1取得的節點中移除。

  37. 節點的操作(Nodes介面)- 刪除節點 • 以下是Node物件removeChild()方法的語法說明: Node物件變數.removeChild (節點物件) • 回傳值為被刪除的節點物件。 • 以下敘述將從objCurNode節點,移除objRmvNode代表的節點。

  38. 節點的操作(Nodes介面)- 刪除節點 • 配合XPath刪除節點欲一次刪除XML文件內的數個節點時,可以運用selectNodes()方法,配合XPath敘述選取欲刪除的節點,再運用NodeList物件的removeAll()方法,一次就將選取出的節點,從XML文件內刪除。 • 以下是removeAll()方法的語法: NodeList物件變數.removeAll • 無回傳值。 • 以下敘述將移除objNodeList節點集物件內所有節點。

  39. 節點的操作(Nodes介面)- 取代節點 • 以新節點取代XML文件內舊節點的步驟如下: STEP 1、運用DOMDoocument物件的CreateElement()方法,建立欲取代的新元素。 STEP 2、運用DOMDoocument物件的createTextNode()方法,建立欲取代舊元素之新元素的文字節點。 STEP 3、呼叫節點物件(Node物件)的appendChild()方法,將於STEP 2完成建立的文字節點,加到STEP 1建立的元素。 STEP 4、從XML文件內,取得欲取代子節點的節點。 STEP 5、呼叫節點物件(Node物件)的replaceChild()方法,完成節點的取代。

  40. 節點的操作(Nodes介面)- 取代節點 • 以下為執行節點取代動作的replaceChild()方法: Node物件變數.replaceChild (新節點, 舊節點) • 回傳值為被取代的舊節點。 • 以下敘述將把objCurNode節點包含的第2個子節點,取代為objNewNode引用的節點。

  41. 節點的操作(Nodes介面)- 節點屬性的取得、新增與刪除 • 屬性的取得欲取得節點的屬性時,可使用節點物件(Node物件)的getAttribute()方法。 Node物件變數.getAttribute(屬性名稱) • 回傳值為取得的屬性值字串,若屬性沒有被設定又沒有預設值,則傳回空字串(empty)。 • 以下敘述將取得objCurNode所引用節點,名為isbn的屬性值。

  42. 節點的操作(Nodes介面)- 節點屬性的取得、新增與刪除 • 若欲取得屬性節點時,則可呼叫getAttributeNode()方法,語法如下: Node物件變數.getAttributeNode(屬性名稱) • 回傳值為取得的屬性物件,若屬性沒有被設定又沒有預設值,則傳回null。

  43. 節點的操作(Nodes介面)- 節點屬性的取得、新增與刪除 • 屬性的刪除欲刪除節點的屬性時,可使用節點物件(Node物件)的removeAttribute()方法。 Node物件變數.removeAttribute(屬性名稱) • 沒有回傳值。 • 以下敘述將刪除objCurNode所引用節點的sale屬性。

  44. 節點的操作(Nodes介面)- 節點屬性的取得、新增與刪除 • 屬性的新增與修改欲新增節點的屬性時,可使用節點物件(Node物件)的setAttribute()方法。若新增的屬性已經存在,setAttribute()方法將修改指定屬性的值。 Node物件變數.setAttribute(屬性名稱, 屬性值) • 沒有回傳值。 • 以下敘述將為objSetAtt所引用節點,新增名為penname,值為『位元文化』的屬性。

  45. 節點的操作(Nodes介面)- 利用遞迴觀念輸出所有元素內容 • 遞迴觀念的實做方式,是在函數或副程式內,呼叫自己。直到符合某種條件後,才停止遞迴呼叫。 • 運用遞迴觀念,輸出XML文件中所有文字元素,邏輯是當欲輸出的元素是一個文字元素時(此類元素內將僅包含一個文字類型的節點),就進行元素內容的輸出。若輸出的不是一個文字元素,則進行遞迴呼叫。

  46. 節點的操作(Nodes介面)- 利用遞迴觀念輸出所有元素內容 • 以下ListNode函數運用遞迴觀念,輸出某元素下所有文字元素的內容,呼叫時傳入參數為欲輸出內容的元素。

  47. 節點的操作(Nodes介面)- 運用XSLT轉換文件 • 欲透過DOM物件將XSLT文件套用於XML文件,並執行轉換,可以運用Node物件的transformNode()方法與transformNodeToObject()方法完成。 • 呼叫transformNode()方法的語法如下: Node物件變數.transformNode (XSLT物件) • 回傳值為XML文件經過轉換後產生的字串

  48. 節點的操作(Nodes介面)- 運用XSLT轉換文件 • 以下敘述內objDOM將引用至欲被轉換的XML文件,objXSLDOM則引用至XSLT文件,呼叫transformNode()方法執行轉換後,將傳回XML文件轉換後的字串,再利用objNewDOM物件的loadXML()方法,將字串載入成為經過轉換的DOM物件。

  49. 節點的操作(Nodes介面)- 運用XSLT轉換文件 • 呼叫transformNodeToObject()方法的語法如下: Node物件變數.transformNodeToObject XSLT物件, 結果DOM物件 • 無回傳值。 • 在XSLT文件內,必須加上以下敘述取消XML文件的宣告,否則將無法正常呼叫transformNodeToObject()方法,執行轉換動作。 • 以下敘述內objDOM將引用至欲被轉換的XML文件,objXSLDOM則引用至XSLT文件,objNewDOM則為以轉換結果建立的DOM物件。

  50. 節點的操作(Nodes介面)- 運用XSLT轉換文件 • 呼叫transformNodeToObject()方法的語法如下: Node物件變數.transformNodeToObject XSLT物件, 結果DOM物件 • 無回傳值。 • 在XSLT文件內,必須加上以下敘述取消XML文件的宣告,否則將無法正常呼叫transformNodeToObject()方法,執行轉換動作。 • 以下敘述內objDOM將引用至欲被轉換的XML文件,objXSLDOM則引用至XSLT文件,objNewDOM則為以轉換結果建立的DOM物件。

More Related