50
9 9 XML DOM XML DOM 第第第第第 第第第第第

第 9 章 XML DOM 物件的使用

  • Upload
    zev

  • View
    77

  • Download
    2

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: 第  9  章  XML DOM 物件的使用

第 第 9 9 章 章 XML DOMXML DOM 物件的使物件的使用用

Page 2: 第  9  章  XML DOM 物件的使用

簡介簡介 XML DOMXML DOM 物件物件 什麼是什麼是 DOMDOM

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

W3CW3C 的的 DOMDOM 標準標準19981998 年年 W3CW3C 公佈了公佈了 DOMDOM 物件模型標準層級物件模型標準層級 11 的規的規格書(格書( Document Object Model (DOM) Level 1 SpecifiDocument Object Model (DOM) Level 1 Specification Version 1.0cation Version 1.0 )。該規格書定義了)。該規格書定義了 DOMDOM 介面內介面內各種介面組(各種介面組( Interface SetInterface Set )。整份文件包含兩個主)。整份文件包含兩個主要的部份,一是要的部份,一是 DOMDOM 核心部份(核心部份( DOM CoreDOM Core ),另),另一是一是 HTMLHTML 部份(部份( DOM HTMLDOM HTML )。)。

Page 3: 第  9  章  XML DOM 物件的使用

簡介簡介 XML DOMXML DOM 物件物件 W3CW3C 的的 XML DOMXML DOM 與與 MSXMLMSXML 介面介面

DOM CoreDOM Core 中,亦運用樹狀結構表達中,亦運用樹狀結構表達 XMLXML 文件中的文件中的資料,這個結構稱之為資料,這個結構稱之為 DOM TreeDOM Tree 。以下為。以下為 W3CW3C 中,中,DOM TreeDOM Tree 所包含的元素。所包含的元素。

» DocumentDocument» Document FragmentDocument Fragment» Document TypeDocument Type» ElementElement» AttributeAttribute» TextText» EntityEntity» Entity ReferenceEntity Reference» Process InstructionProcess Instruction» CommentComment» CDATA SectionCDATA Section» NotationNotation

Page 4: 第  9  章  XML DOM 物件的使用

簡介簡介 XML DOMXML DOM 物件物件 MSXMLMSXML 實做的實做的 DOMDOM 物件,將以物件,將以

DocumentDocument (( IXMLDOMDocumentIXMLDOMDocument )、)、 NodeNode (( IXMLDOMNoIXMLDOMNodede )、)、 NodeListsNodeLists (( IXMLDOMNodeListsIXMLDOMNodeLists )這三個介面,架構)這三個介面,架構出整個出整個 DOM TreeDOM Tree ,如下圖所示。,如下圖所示。

text

Document

Node

NodeLists

Page 5: 第  9  章  XML DOM 物件的使用

簡介簡介 XML DOMXML DOM 物件物件 下表為下表為 MSXMLMSXML 所實做之所實做之 DOMDOM 與與 W3CW3C 標準標準

的對照。 的對照。

Page 6: 第  9  章  XML DOM 物件的使用

載入載入 XMLXML 文件 文件 - - 建立建立 DocumentDocument 物件與載入物件與載入 XMLXML 文文件件 在客戶端建立在客戶端建立 DocumentDocument 物件物件

在客戶端用在客戶端用 VBScriptVBScript 語言,建立語言,建立 DocumentDocument 物物件的語法如下:件的語法如下:Set Set 物件變數 物件變數 = =

CreateObject("Msxml2.DOMDocument")CreateObject("Msxml2.DOMDocument") 在客戶端用在客戶端用 JavaScriptJavaScript (( JScriptJScript )語言建立)語言建立

DocumentDocument 物件的語法如下:物件的語法如下:物件變數 物件變數 = new = new

ActiveXObject("Msxml2.DOMDocument")ActiveXObject("Msxml2.DOMDocument")

Page 7: 第  9  章  XML DOM 物件的使用

載入載入 XMLXML 文件 文件 - - 建立建立 DocumentDocument 物件與載入物件與載入 XMLXML 文文件件 在伺服端建立在伺服端建立 DocumentDocument 物件物件

在伺服端用在伺服端用 VBScriptVBScript 語言,建立語言,建立 DocumentDocument 物物件的語法如下:件的語法如下:Set DocumentSet Document 物件變數 物件變數 = =

Server.CreateObject ("Msxml2.DOMDocument")Server.CreateObject ("Msxml2.DOMDocument")

在伺服端用在伺服端用 JavaScriptJavaScript (( JScriptJScript )語法建立)語法建立DocumentDocument 物件的語法如下:物件的語法如下:物件變數 物件變數 = =

Server.CreateObject ("Msxml2.DOMDocument")Server.CreateObject ("Msxml2.DOMDocument")

Page 8: 第  9  章  XML DOM 物件的使用

載入載入 XMLXML 文件 文件 - - 載入載入 XMLXML 文件文件 完成完成 DocumentDocument 物件的建立後,將再利用物件的建立後,將再利用

DocumentDocument 物件的物件的 load()load() 方法載入檔案,語法方法載入檔案,語法如下:如下:

DocumentDocument 物件物件 .load(.load( 檔案路徑檔案路徑 )) 以下敘述將使用以下敘述將使用 VBScriptVBScript 語言,從伺服端載語言,從伺服端載

入入 book.xmlbook.xml 檔。檔。

Page 9: 第  9  章  XML DOM 物件的使用

載入載入 XMLXML 文件 文件 - - 利用利用 <XML><XML> 標籤載入標籤載入 XMLXML 文件文件 利用利用 <XML><XML> 標籤於標籤於 HTMLHTML 網頁建立網頁建立 XMLXML 文件文件

直接在直接在 HTMLHTML 網頁中,運用網頁中,運用 <XML><XML> 標籤建立標籤建立 XMLXML 文件的語文件的語法如下:法如下:

<XML id=<XML id= 物件變數名稱物件變數名稱 >>

XMLXML 文件文件</XML></XML>

以下敘述將在以下敘述將在 HTMLHTML 網頁內定義網頁內定義 XMLXML 文件,並於文件,並於 ScriptScript 語言語言中,運用中,運用 objDOMobjDOM 變數引用。變數引用。

Page 10: 第  9  章  XML DOM 物件的使用

載入載入 XMLXML 文件 文件 - - 利用利用 <XML><XML> 標籤載入標籤載入 XMLXML 文件文件 在在 HTMLHTML 的的 ScriptScript 中,欲取得中,欲取得 XMLXML 文件的文件的

內容時,必須運用內容時,必須運用 DOMDOM 物件的物件的 xmlxml 屬性,屬性,語法如下:語法如下:

DOMDOM 物件物件 .xml.xml 以下敘述將把以下敘述將把 objDOMobjDOM 物件的文件內容設定物件的文件內容設定

給給 xmlcodexmlcode 物件的物件的 innerTextinnerText 屬性。屬性。

Page 11: 第  9  章  XML DOM 物件的使用

載入載入 XMLXML 文件 文件 - - 利用利用 <XML><XML> 標籤載入標籤載入 XMLXML 文件文件 利用利用 <XML><XML> 標籤載入標籤載入

運用運用 <XML><XML> 標籤從伺服端,載入標籤從伺服端,載入 XMLXML 文件文件的語法如下:的語法如下:

<XML id=<XML id= 物件變數名稱 物件變數名稱 scr=scr= 檔案來源檔案來源 URL></URL></

XML>XML>

Page 12: 第  9  章  XML DOM 物件的使用

載入載入 XMLXML 文件文件 - - 儲存儲存 XMLXML 文文件件 欲儲存欲儲存 XMLXML 文件時,可使用文件時,可使用 documentdocument 物件物件

的的 save()save() 方法,語法如下:方法,語法如下:DocumentDocument 物件物件 .save(.save( 儲存目標儲存目標 ))

Page 13: 第  9  章  XML DOM 物件的使用

載入載入 XMLXML 文件文件 - - 取得取得 XMLXML 文件中文件中的節點的節點 當當 XMLXML 文件被載入文件被載入 DOMDOM 物件後,將以樹狀物件後,將以樹狀

結構呈現結構呈現 XMLXML 文件內的資料。在文件內的資料。在 MSXMLMSXML中,中, DocumentDocument 物件本身是一個代表物件本身是一個代表 XMLXML 文文件的元素,也是建立件的元素,也是建立 XMLXML 文件時,必須第一文件時,必須第一個建立的物件。個建立的物件。

DocumentDocument 物件的物件的 documentElementdocumentElement 屬性,屬性,則為則為 XMLXML 文件的文件元素(文件的文件元素( Document Document ElementElement )。每個元素若有下一層元素時,這)。每個元素若有下一層元素時,這些元素將被包含於一個節點集中,並可運用些元素將被包含於一個節點集中,並可運用childNodeschildNodes 屬性引用。屬性引用。

Page 14: 第  9  章  XML DOM 物件的使用

載入載入 XMLXML 文件文件 - - 取得取得 XMLXML 文件中文件中的節點的節點 在在 MSXMLMSXML 中,整份文件可表達如下:中,整份文件可表達如下:

Page 15: 第  9  章  XML DOM 物件的使用

載入載入 XMLXML 文件文件 - - 取得取得 XMLXML 文件中文件中的節點的節點 以下語法將引用至以下語法將引用至 XMLXML 文件的文件元素。文件的文件元素。

DocumentDocument 物件物件 . documentElement. documentElement 以下敘述則取得文件元素下一層元素所組成以下敘述則取得文件元素下一層元素所組成

的節點集。的節點集。DocumentDocument 物件物件 . documentElement.childNodes. documentElement.childNodes

若欲取得節點集中的元素時,可使用若欲取得節點集中的元素時,可使用 item()item()方法,語法如下:方法,語法如下:

NodeListsNodeLists 物件物件 .item(.item( 索引值索引值 ))

Page 16: 第  9  章  XML DOM 物件的使用

載入載入 XMLXML 文件文件 - - 取得取得 XMLXML 文件中文件中的節點的節點 以下敘述將取得文件節點下一層節點的第以下敘述將取得文件節點下一層節點的第 11 個節個節

點,點, objDOMobjDOM 物件變數將引用至某物件變數將引用至某 DocumentDocument 物件。物件。

以下敘述將取得文件節點下第一層節點中,第以下敘述將取得文件節點下第一層節點中,第 11 個節個節點的下一層節點中第點的下一層節點中第 22 個節點,個節點, objDOMobjDOM 為一為一DocumentDocument 物件。物件。

Page 17: 第  9  章  XML DOM 物件的使用

節點集的操作節點集的操作 (NodeList(NodeList 介面介面 ))- - 簡介簡介 NodeListNodeList 介面介面 在在 DOMDOM 物件中,某節點若包含數個子節點物件中,某節點若包含數個子節點

時,透過時,透過 childNodeschildNodes 屬性將可取得由節點所屬性將可取得由節點所有子節點組成的節點集物件。有子節點組成的節點集物件。

節點集物件的型態為節點集物件的型態為 DOMDOM 物件的物件的 NodeListNodeList介面,用於操作容納數個節點的節點集物件。介面,用於操作容納數個節點的節點集物件。

Page 18: 第  9  章  XML DOM 物件的使用

節點集的操作節點集的操作 (NodeList(NodeList 介面介面 ))- - 利用利用 forfor 迴圈輸出節點迴圈輸出節點 欲輸出節點集中的節點時,可以利用欲輸出節點集中的節點時,可以利用 forfor 迴圈迴圈

配合節點集的長度(也就是節點的個數),配合節點集的長度(也就是節點的個數),並利用並利用 NodeListNodeList 物件的物件的 item()item() 方法,依序取方法,依序取得節點集內的節點。得節點集內的節點。

以下語法將取得節點集內節點的個數。以下語法將取得節點集內節點的個數。NodeListNodeList 物件變數物件變數 .length.length

以下語法將取得節點集內的節點。以下語法將取得節點集內的節點。NodeListNodeList 物件變數物件變數 .item(.item( 索引值索引值 ))

Page 19: 第  9  章  XML DOM 物件的使用

節點集的操作節點集的操作 (NodeList(NodeList 介面介面 ))- - 利用利用 forfor 迴圈輸出節點迴圈輸出節點 以下敘述將取得節點集中所有節點,並以以下敘述將取得節點集中所有節點,並以

curNodecurNode 引用。引用。

Page 20: 第  9  章  XML DOM 物件的使用

節點集的操作節點集的操作 (NodeList(NodeList 介面介面 ))- - 利用利用 for eachfor each 迴圈輸出節點迴圈輸出節點 在在 VBScriptVBScript 中,除了可以利用中,除了可以利用 forfor 迴圈外,還可以迴圈外,還可以

運用運用 for eachfor each 迴圈。在下面的迴圈。在下面的 for eachfor each 迴圈中,將運迴圈中,將運用用 curNodecurNode 做為引用做為引用 childNodeschildNodes 內節點的變數。語內節點的變數。語法如下:法如下:

for each for each 物件變數 物件變數 In In 節點集物件節點集物件…………

nextnext 以下敘述將運用以下敘述將運用 for eachfor each 迴圈,列出節點集內的節點。迴圈,列出節點集內的節點。

Page 21: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 簡介簡介 NodeNode 介面介面 在在 DOMDOM 物件的觀念中,物件的觀念中, XMLXML 文件內,不論文件內,不論

是元素、屬性或元素的內容都被視為節點是元素、屬性或元素的內容都被視為節點(( NodeNode )。)。

NodeNode 介面在介面在 DOMDOM 物件內,是非常重要的介物件內,是非常重要的介面。面。

Page 22: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 節點的取得節點的取得 NodeNode 物件提供了一些屬性,可以協助使用者,物件提供了一些屬性,可以協助使用者,

取得與引用節點相關的節點,說明如下表。取得與引用節點相關的節點,說明如下表。

Page 23: 第  9  章  XML DOM 物件的使用

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

Page 24: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 節點的取得節點的取得 nodeNamenodeName 屬性屬性

依據不同類型的節點,傳回不同的資料,如:依據不同類型的節點,傳回不同的資料,如:若節點類型為元素(若節點類型為元素( ElementElement ),則會傳回),則會傳回標籤的名稱。 標籤的名稱。

texttext 屬性屬性傳回節點包含之所有節點的內容。 傳回節點包含之所有節點的內容。

xmlxml 屬性屬性取得節點的內容,並包含節點的取得節點的內容,並包含節點的 XMLXML 標籤。標籤。

Page 25: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 節點的類型節點的類型 由於由於 DOMDOM 物件的觀念中,在物件的觀念中,在 XMLXML 文件內,文件內,

不論是元素、屬性或者元素的內容,都將被不論是元素、屬性或者元素的內容,都將被視為節點。視為節點。

節點內容容納的是哪種類型的資料,可運用節點內容容納的是哪種類型的資料,可運用nodeTypenodeType 屬性取得。屬性取得。

欲取得代表節點型態的字串,可透過欲取得代表節點型態的字串,可透過nodeTypeStringnodeTypeString 屬性取得。屬性取得。

Page 26: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 運用運用 XPathXPath 選取節點選取節點 選取單一節點選取單一節點

欲選取單一節點時,可配合欲選取單一節點時,可配合 XPathXPath 語法,呼叫語法,呼叫selectSingleNode()selectSingleNode() 方法,即可從方法,即可從 XMLXML 文件的某文件的某個節點下,選取出個節點下,選取出 XPathXPath 指定的子節點。指定的子節點。

NodeNode 物件變數物件變數 .selectSingleNode(XPath.selectSingleNode(XPath 敘述敘述 )) 回傳值為選取到的子節點物件,當回傳值為選取到的子節點物件,當 XPathXPath 敘述敘述

可選取數個節點時,則將傳回第一個被選取到的可選取數個節點時,則將傳回第一個被選取到的節點。若未選取到任何子節點時,將傳回節點。若未選取到任何子節點時,將傳回 nullnull值。 值。

Page 27: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 運用運用 XPathXPath 選取節點選取節點 以下敘述將選取以下敘述將選取 documentElementdocumentElement 節點下第節點下第 11

個個 bookbook 元素的元素的 tiltetilte 元素,並由元素,並由 selNodeselNode 物件變物件變數引用。數引用。

Page 28: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 運用運用 XPathXPath 選取節點選取節點 選取數個節點選取數個節點

若運用若運用 XPathXPath 語法選取出數個節點時,則必須語法選取出數個節點時,則必須呼叫呼叫 selectNodes()selectNodes() 方法,即可從方法,即可從 XMLXML 文件中,文件中,選取出選取出 XPathXPath 指定的子節點。指定的子節點。

NodeNode 物件變數物件變數 .selectNodes(XPath.selectNodes(XPath 敘述敘述 )) 回傳值為選取到的節點,所組成之節點集物件,回傳值為選取到的節點,所組成之節點集物件,

若未選取到任何節點,則傳回一個空的節點集物若未選取到任何節點,則傳回一個空的節點集物件,在程式中,可判斷節點集的件,在程式中,可判斷節點集的 lengthlength 屬性是屬性是否否 00 ,加以斷定。 ,加以斷定。

Page 29: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 運用運用 XPathXPath 選取節點選取節點 以下敘述將選取以下敘述將選取 XMLXML 文件之文件元素下的所有文件之文件元素下的所有

bookbook 元素。元素。

以下敘述則將利用以下敘述則將利用 XPathXPath 敘述,配合敘述,配合selectNodes()selectNodes() 方法,篩選出方法,篩選出 XMLXML 文件中,文件中, isbnisbn屬性為屬性為 957-0462-42-6957-0462-42-6 的的 bookbook 元素。元素。

Page 30: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 運用元素標籤取得節點運用元素標籤取得節點 若想取得若想取得 XMLXML 文件內,某特定名稱的節點時,文件內,某特定名稱的節點時,

可以運用可以運用 DocumentDocument 物件的物件的getElementsByTagName()getElementsByTagName() 方法。語法如下:方法。語法如下:

DocumentDocument 物件變數物件變數 .getElementsByTagName (.getElementsByTagName ( 標籤名標籤名稱稱 ))

回傳值為完成代表新元素的節點集物件。回傳值為完成代表新元素的節點集物件。

Page 31: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 新增節點新增節點 利用利用 DOMDOM 物件,將節點新增至物件,將節點新增至 XMLXML 文件的步驟如下:文件的步驟如下:

STEP 1STEP 1 、運用、運用 DOMDoocumentDOMDoocument 物件的物件的 CreateElement()CreateElement() 方法,方法,建立欲新增的元素。建立欲新增的元素。

STEP 2STEP 2 、運用、運用 DOMDoocumentDOMDoocument 物件的物件的 createTextNode()createTextNode() 方法,方法,建立包含欲新增元素之內容的文字節點。建立包含欲新增元素之內容的文字節點。

STEP 3STEP 3 、呼叫節點物件(、呼叫節點物件( NodeNode 物件)的物件)的 appendChild()appendChild() 方法,方法,將於將於 STEP 2STEP 2 完成建立的文字節點,加到完成建立的文字節點,加到 STEP 1STEP 1 建立的元建立的元素。素。

STEP 4STEP 4 、從、從 XMLXML 文件內,取得欲加入新節點的節點。文件內,取得欲加入新節點的節點。STEP 5STEP 5 、呼叫節點物件(、呼叫節點物件( NodeNode 物件)的物件)的 appendChild()appendChild() 方方

法、法、 insertBefore()insertBefore() 方法或方法或 insertAfter()insertAfter() 方法,完成節點的方法,完成節點的新增。新增。

Page 32: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 新增節點新增節點 DOMDocumentDOMDocument 物件物件 createElement()createElement() 方法方法

以下是以下是 DOMDocumentDOMDocument 物件物件 createElement()createElement() 方方法的語法說明: 法的語法說明:

DocumentDocument 物件變數物件變數 .createElement(.createElement( 標籤名稱標籤名稱 ))

回傳值為完成代表新元素的節點物件。 回傳值為完成代表新元素的節點物件。 以下敘述將建立名為以下敘述將建立名為 pennamepenname 的節點,並由的節點,並由

objNewNodeobjNewNode 引用。引用。

Page 33: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 新增節點新增節點 DOMDocumentDOMDocument 物件物件 createTextNode()createTextNode() 方法方法

以下是以下是 DOMDocumentDOMDocument 物件物件 createTextNode()createTextNode()方法的語法說明: 方法的語法說明: DocumentDocument 物件變數物件變數 .createTextNode (.createTextNode ( 內容字串內容字串 ))

回傳值為完成代表文字節點的節點物件。 回傳值為完成代表文字節點的節點物件。 以下敘述將建立一個內容為以下敘述將建立一個內容為『『位元文化位元文化』』的文字的文字

節點,並由節點,並由 objTextNodeobjTextNode 引用。引用。

Page 34: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 新增節點新增節點 NodeNode 物件物件 appChild()appChild() 方法方法

以下是以下是 NodeNode 物件物件 appChild()appChild() 方法的語法說明: 方法的語法說明: NodeNode 物件變數物件變數 .appChild(.appChild( 節點物件節點物件 ))

回傳值為新增至節點的節點物件。 回傳值為新增至節點的節點物件。 以下敘述將把以下敘述將把 objTextNodeobjTextNode 新增至新增至 objNewNodeobjNewNode ,,其中其中 objTextNodeobjTextNode 與與 objNewNodeobjNewNode均為引用至節均為引用至節點物件的變數。點物件的變數。

Page 35: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 新增節點新增節點 NodeNode 物件物件 insertBefore()insertBefore() 方法、方法、 insertAtfter()insertAtfter() 方法方法

appendChild()appendChild() 方法僅是將新增的元素,加到特定元素所方法僅是將新增的元素,加到特定元素所包含的最後一個子元素。若欲指定新增節點的位置,則包含的最後一個子元素。若欲指定新增節點的位置,則必須運用必須運用 insertBefore()insertBefore() 方法或方法或 insertAfter()insertAfter() 方法,將元方法,將元素新增到參考節點之前或之後。兩方法的語法如下:素新增到參考節點之前或之後。兩方法的語法如下:

NodeNode 物件變數物件變數 .insertBefore (.insertBefore ( 新增節點新增節點 , , 參考節點參考節點 ))

NodeNode 物件變數物件變數 .insertAfter (.insertAfter ( 新增節點新增節點 , , 參考節點參考節點 )) 回傳值為新增至回傳值為新增至 XMLXML 文件的元素。 文件的元素。 以下敘述將在以下敘述將在 objCurNodeobjCurNode 節點包含的第節點包含的第 22 個子節點前,個子節點前,插入插入 objNewNodeobjNewNode 物件變數引用的節點。物件變數引用的節點。

Page 36: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 刪除節點刪除節點 子節點的刪除子節點的刪除

從從 XMLXML 文件刪除某元素的子節點之步驟如下:文件刪除某元素的子節點之步驟如下:STEP 1STEP 1 、取得欲刪除節點的上一層節點。、取得欲刪除節點的上一層節點。STEP 2STEP 2 、取得欲刪除的節點。、取得欲刪除的節點。STEP 3STEP 3 、呼叫節點物件(、呼叫節點物件( NodeNode 物件)的物件)的

removeChild()removeChild() 方法,將於方法,將於 STEP 2STEP 2 取得的節點,取得的節點,從從 STEP 1STEP 1 取得的節點中移除。取得的節點中移除。

Page 37: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 刪除節點刪除節點 以下是以下是 NodeNode 物件物件 removeChild()removeChild() 方法的語法說方法的語法說

明: 明: NodeNode 物件變數物件變數 .removeChild (.removeChild ( 節點物件節點物件 ))

回傳值為被刪除的節點物件。 回傳值為被刪除的節點物件。 以下敘述將從以下敘述將從 objCurNodeobjCurNode 節點,移除節點,移除

objRmvNodeobjRmvNode 代表的節點。 代表的節點。

Page 38: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 刪除節點刪除節點 配合配合 XPathXPath 刪除節點刪除節點

欲一次刪除欲一次刪除 XMLXML 文件內的數個節點時,可以運用文件內的數個節點時,可以運用selectNodes()selectNodes() 方法,配合方法,配合 XPathXPath 敘述選取欲刪除的節點,敘述選取欲刪除的節點,再運用再運用 NodeListNodeList 物件的物件的 removeAll()removeAll() 方法,一次就將選方法,一次就將選取出的節點,從取出的節點,從 XMLXML 文件內刪除。文件內刪除。

以下是以下是 removeAll()removeAll() 方法的語法:方法的語法:NodeListNodeList 物件變數物件變數 .removeAll.removeAll

無回傳值。無回傳值。 以下敘述將移除以下敘述將移除 objNodeListobjNodeList 節點集物件內所有節點。 節點集物件內所有節點。

Page 39: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 取代節點取代節點 以新節點取代以新節點取代 XMLXML 文件內舊節點的步驟如下:文件內舊節點的步驟如下:

STEP 1STEP 1 、運用、運用 DOMDoocumentDOMDoocument 物件的物件的CreateElement()CreateElement() 方法,建立欲取代的新元素。方法,建立欲取代的新元素。

STEP 2STEP 2 、運用、運用 DOMDoocumentDOMDoocument 物件的物件的createTextNode()createTextNode() 方法,建立欲取代舊元素之新元方法,建立欲取代舊元素之新元素的文字節點。素的文字節點。

STEP 3STEP 3 、呼叫節點物件(、呼叫節點物件( NodeNode 物件)的物件)的appendChild()appendChild() 方法,將於方法,將於 STEP 2STEP 2 完成建立的文完成建立的文字節點,加到字節點,加到 STEP 1STEP 1 建立的元素。建立的元素。

STEP 4STEP 4 、從、從 XMLXML 文件內,取得欲取代子節點的節點。文件內,取得欲取代子節點的節點。STEP 5STEP 5 、呼叫節點物件(、呼叫節點物件( NodeNode 物件)的物件)的

replaceChild()replaceChild() 方法,完成節點的取代。方法,完成節點的取代。

Page 40: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 取代節點取代節點 以下為執行節點取代動作的以下為執行節點取代動作的 replaceChild()replaceChild() 方法:方法:

NodeNode 物件變數物件變數 .replaceChild (.replaceChild ( 新節點新節點 , , 舊節舊節點點 ))

回傳值為被取代的舊節點。回傳值為被取代的舊節點。 以下敘述將把以下敘述將把 objCurNodeobjCurNode 節點包含的第節點包含的第 22 個子個子

節點,取代為節點,取代為 objNewNodeobjNewNode 引用的節點。 引用的節點。

Page 41: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 節點屬性的取得、新增與刪除節點屬性的取得、新增與刪除 屬性的取得屬性的取得

欲取得節點的屬性時,可使用節點物件(欲取得節點的屬性時,可使用節點物件( NodeNode物件)的物件)的 getAttribute()getAttribute() 方法。方法。

NodeNode 物件變數物件變數 .getAttribute(.getAttribute( 屬性名稱屬性名稱 )) 回傳值為取得的屬性值字串,若屬性沒有被設定回傳值為取得的屬性值字串,若屬性沒有被設定又沒有預設值,則傳回空字串(又沒有預設值,則傳回空字串( emptyempty )。)。

以下敘述將取得以下敘述將取得 objCurNodeobjCurNode 所引用節點,名為所引用節點,名為isbnisbn 的屬性值。的屬性值。

Page 42: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 節點屬性的取得、新增與刪除節點屬性的取得、新增與刪除 若欲取得屬性節點時,則可呼叫若欲取得屬性節點時,則可呼叫

getAttributeNode()getAttributeNode() 方法,語法如下:方法,語法如下:NodeNode 物件變數物件變數 .getAttributeNode(.getAttributeNode( 屬性名稱屬性名稱 ))

回傳值為取得的屬性物件,若屬性沒有被設定又回傳值為取得的屬性物件,若屬性沒有被設定又沒有預設值,則傳回沒有預設值,則傳回 nullnull 。。

Page 43: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 節點屬性的取得、新增與刪除節點屬性的取得、新增與刪除 屬性的刪除屬性的刪除

欲刪除節點的屬性時,可使用節點物件(欲刪除節點的屬性時,可使用節點物件( NodeNode物件)的物件)的 removeAttribute()removeAttribute() 方法。方法。

NodeNode 物件變數物件變數 .removeAttribute(.removeAttribute( 屬性名稱屬性名稱 )) 沒有回傳值。沒有回傳值。 以下敘述將刪除以下敘述將刪除 objCurNodeobjCurNode 所引用節點的所引用節點的 salesale

屬性。 屬性。

Page 44: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 節點屬性的取得、新增與刪除節點屬性的取得、新增與刪除 屬性的新增與修改屬性的新增與修改

欲新增節點的屬性時,可使用節點物件(欲新增節點的屬性時,可使用節點物件( NodeNode 物物件)的件)的 setAttribute()setAttribute() 方法。若新增的屬性已經存在,方法。若新增的屬性已經存在,setAttribute()setAttribute() 方法將修改指定屬性的值。方法將修改指定屬性的值。

NodeNode 物件變數物件變數 .setAttribute(.setAttribute( 屬性名稱屬性名稱 , , 屬性值屬性值 )) 沒有回傳值。沒有回傳值。 以下敘述將為以下敘述將為 objSetAttobjSetAtt 所引用節點,新增名為所引用節點,新增名為

pennamepenname ,值為,值為『『位元文化位元文化』』的屬性。 的屬性。

Page 45: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 利用遞迴觀念輸出所有元素內容利用遞迴觀念輸出所有元素內容 遞迴觀念的實做方式,是在函數或副程式內,呼遞迴觀念的實做方式,是在函數或副程式內,呼

叫自己。直到符合某種條件後,才停止遞迴呼叫。叫自己。直到符合某種條件後,才停止遞迴呼叫。 運用遞迴觀念,輸出運用遞迴觀念,輸出 XMLXML 文件中所有文字元素,文件中所有文字元素,邏輯是當欲輸出的元素是一個文字元素時(此類邏輯是當欲輸出的元素是一個文字元素時(此類元素內將僅包含一個文字類型的節點),就進行元素內將僅包含一個文字類型的節點),就進行元素內容的輸出。若輸出的不是一個文字元素,元素內容的輸出。若輸出的不是一個文字元素,則進行遞迴呼叫。則進行遞迴呼叫。

Page 46: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 利用遞迴觀念輸出所有元素內容利用遞迴觀念輸出所有元素內容 以下以下 ListNodeListNode函數運用遞迴觀念,輸出某元素函數運用遞迴觀念,輸出某元素

下所有文字元素的內容,呼叫時傳入參數為欲輸下所有文字元素的內容,呼叫時傳入參數為欲輸出內容的元素。出內容的元素。

Page 47: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 運用運用 XSLTXSLT 轉換文件轉換文件 欲透過欲透過 DOMDOM 物件將物件將 XSLTXSLT 文件套用於文件套用於 XMLXML 文件,並文件,並執行轉換,可以運用執行轉換,可以運用 NodeNode 物件的物件的 transformNode()transformNode() 方法方法與與 transformNodeToObject()transformNodeToObject() 方法完成。方法完成。

呼叫呼叫 transformNode()transformNode() 方法的語法如下:方法的語法如下:NodeNode 物件變數物件變數 .transformNode (XSLT.transformNode (XSLT 物件物件 ))

回傳值為回傳值為 XMLXML 文件經過轉換後產生的字串文件經過轉換後產生的字串

Page 48: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 運用運用 XSLTXSLT 轉換文件轉換文件 以下敘述內以下敘述內 objDOMobjDOM 將引用至欲被轉換的將引用至欲被轉換的 XMLXML 文文

件,件, objXSLDOMobjXSLDOM 則引用至則引用至 XSLTXSLT 文件,呼叫文件,呼叫transformNode()transformNode() 方法執行轉換後,將傳回方法執行轉換後,將傳回 XMLXML 文件轉文件轉換後的字串,再利用換後的字串,再利用 objNewDOMobjNewDOM 物件的物件的 loadXML()loadXML() 方方法,將字串載入成為經過轉換的法,將字串載入成為經過轉換的 DOMDOM 物件。物件。

Page 49: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 運用運用 XSLTXSLT 轉換文件轉換文件 呼叫呼叫 transformNodeToObject()transformNodeToObject() 方法的語法如下:方法的語法如下:

NodeNode 物件變數物件變數 .transformNodeToObject .transformNodeToObject

XSLTXSLT 物件物件 , , 結果結果 DOMDOM 物件物件 無回傳值。無回傳值。 在在 XSLTXSLT 文件內,必須加上以下敘述取消文件內,必須加上以下敘述取消 XMLXML 文件的文件的宣告,否則將無法正常呼叫宣告,否則將無法正常呼叫 transformNodeToObject()transformNodeToObject()方法,執行轉換動作。方法,執行轉換動作。

以下敘述內以下敘述內 objDOMobjDOM 將引用至欲被轉換的將引用至欲被轉換的 XMLXML 文文件,件, objXSLDOMobjXSLDOM 則引用至則引用至 XSLTXSLT 文件,文件, objNewDOMobjNewDOM則為以轉換結果建立的則為以轉換結果建立的 DOMDOM 物件。物件。

Page 50: 第  9  章  XML DOM 物件的使用

節點的操作節點的操作 (Nodes(Nodes 介面介面 ))- - 運用運用 XSLTXSLT 轉換文件轉換文件 呼叫呼叫 transformNodeToObject()transformNodeToObject() 方法的語法如下:方法的語法如下:

NodeNode 物件變數物件變數 .transformNodeToObject .transformNodeToObject

XSLTXSLT 物件物件 , , 結果結果 DOMDOM 物件物件 無回傳值。無回傳值。 在在 XSLTXSLT 文件內,必須加上以下敘述取消文件內,必須加上以下敘述取消 XMLXML 文件的文件的宣告,否則將無法正常呼叫宣告,否則將無法正常呼叫 transformNodeToObject()transformNodeToObject()方法,執行轉換動作。方法,執行轉換動作。

以下敘述內以下敘述內 objDOMobjDOM 將引用至欲被轉換的將引用至欲被轉換的 XMLXML 文文件,件, objXSLDOMobjXSLDOM 則引用至則引用至 XSLTXSLT 文件,文件, objNewDOMobjNewDOM則為以轉換結果建立的則為以轉換結果建立的 DOMDOM 物件。物件。