• 沒有找到結果。

3-1 DOM 物件介紹

3-1-1:建立 DOCUMENT 物件

利用 DOM 去建立 DOCUMENT 文件,系統使用 VBSCRIPT 的語言建立 DOCUMENT 物件語言,其語法如下:

SET 物件變數=CREATOBJECT(“MSXML2.DOMDOCUMENT”)其中 MSXML 為 MISCROSOFT 的物件,在新版的瀏覽器下 IE6.0 下仍使用 MISCROSOFT XML PARSER ,並不支援最新的 MSXML4.0 部分。

3-1-2:載入 XML 文件

完成 DOCUMENT 物件建立後,將再利用 DOCUMENT 物件的 LOAD 方法 載入方法,如 DOCUMENT 物件.LOAD(檔案路徑) :

如檔案 URL=Îhttp:www.bite.com.tw/book.xml

3-1-3:NODELIST 介面

在 DOM 物件中,某一個節點若包含數個子節點時,透過

For i=0 to (objectDOM.document.childnodes.length-1) Set curNode=objDOM.documentElement.childNode.item(0) Next

if not objDOM.load(“book.xml”) then document.write “無法載入”

else

end if

表 3-1

屬性 說明 Firstchild 第一個節點 Lastchild 最後一個節點 Nextcsbling 包含同一個節點下的下一個節點

Previousbling 包含同一個節點下的上一個節點 parentNode 節點的父節點

childNodes 包含所有子節點的節點集 ownerDocument 取得節點的根元素

NODENAME 屬性 NODE_ATTRIBUTE 屬性名稱 NODE_CDATA_SECTION #cdata-section NODE_COMMENT #comment NODE_DOCUMENT #document NODE_DOCUMENT_TYPE 包含文件型態名稱,如在

<!DOCTYPE xxx….>的 xxx 值 NODE_DOCUMENT_FRAGMENT #document_fragment

NODE_ELEMENT 包含名稱空間的元素名稱 NODE_ENTITY 實體名稱

NODE_ENTITY_REFERENCE 被參照的實體名稱,不包含 引用實體時,實體名稱前 的” &”,以及實體名稱後的

“ ; ”,但包含名稱空間

NODE_NOTATION 記號名稱

NODE_PROFESSION_INSTRUCTION 處理區塊的內容

NODE_TEXT #text

圖 3-1 DOM 樹狀圖

3-1-5:選取單一節點

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

Set selNode=root.selectSingleNode(“/patient/address”)

3-1-6:選取多個節點

若運用 XPATH 語法選取多個節點時,則必須呼叫 selectNodes 方 法,則可以從 XML 文件中,選取出 xpath 指定的子節點。

Node 物件變數.selectNodes(XPATH 敘述)

回傳值為選取到的節點所組成的節點集物件,若選取到任何節 物件的 getElementByTagName 方法。

Document 物件變數.getElementByTagName(“標籤名稱”) 回傳值為代表完成新元素的節點集物件.

圖 3-2 利用 getElementByTag 方法

3-1-8:新增節點

利用 DOM 物件,新增節點至 XML 文件下(但只限於物件中,離開 物件使得改變的 XML 物件不可以儲存)

STEP1:運用 DOMDocument 物件的 CreatElement 方法,建立新 增元素。

STEP2:運用 DOMDocument 物件的 CreatTextNode 方法,建立包 含欲新增元素之內容的文字節點。

STEP3:呼叫節點物件(Node 物件)的 appendChild 方法,將 STEP2 完成建立的文字節點,加到 STEP1 建立的元素。

STEP4:從 XML 文件內,取得欲加入新節點的元素。

STEP5:呼叫節點物件(Node 物件)的 appendChildNode 方法,

insertBefore 方法,或是 inserAfter 方法,完成節點的新增。

3-1-9: DOMDocument 物件變數 creatElement 方法

DOMDocument 物件變數 creatElement(標籤名稱) 說明:

@Document 物件變數

代表 XML 文件的 DOMDocument 物件

@標籤名稱

欲建立的標籤名稱

例建立 ssn 節點

Set objNewNode=objDOM.creatElement(“ssn”)

3-1-10: DOMDocument 物件變數 creatTextNode 方法

DOMDocument 物件變數 creatTextNode(內容字串) 說明:

@Document 物件變數

代表 XML 文件的 DOMDocument 物件

@內容字串

欲建立文字節點的內容

利用內容為 P006 為內容的文字節點

Set objNode=objDOM.creatTextNode(“P006”)

3-1-11:Node 物件 appChild 方法

Node 物件變數.appChild(節點物件) 說明:

3-1-12:Node 物件 insertBefore 方法 insertAfter 方法

上述的 appendChild 方法,只是將新增元素,加至特定元素所包 含的最後一個元素,如果想要指定新增節點的位置,則必須運用 insertBefore 方法或是 insertAfter 方法,將元素新增到參考點之 前後之後:

Node 物件變數,insertBefore(新增節點,參考節點) Node 物件變數,insertAfter(新增節點,參考節點 說明:

例如將 objCurNode 節點包含的第二個節點前,插入 objNewNode 物件變數引用的節點,範例如下 3-3 圖

圖 3-3 將元素新增至特定元素前

圖 3-4 新増元素節點

3-1-13:刪除節點

運用 DOM 物件可刪除 XML 文件內的節點,以 selectNodes 方法,

配合 XPath 敘述選取節點,並運用 Nodelist 物件的 removeAll 方法,

將選取出來的節點,一次就從 XML 文件中刪除。

子節點刪除:

STEP1:取得欲刪除的上一層節點。

STEP2:取得欲刪除的節點。

STEP3:呼叫節點物件(Node 物件)的 removeAll 方法,將 STEP2 取得的 節點,從 STEP1 取得的節點中刪除。

Node 物件變數.removeChild(節點物件)

說明:

@Node 物件變數

引用包含欲刪除的節點物件

@節點物件

引用置欲刪除節點得物件變數

例如由 objNode 節點,移除 objRmvNode 節點 objCurNode.removeChild(objRmvNode)

如圖 3-5

圖 3-5 節點刪除

3-1-14 利用 XPath 刪除節點:

欲一次刪除 XML 文件內的數個節點時,可以運用 selectNodes 方 法配合 XPath 敘述選取欲刪除的節點,再運用 NodeList 物件的 removeAll 方法,一次將選取出的節點從 XML 文件內刪除。

NodeList 物件變數.removeAll

@NodeList 物件變數

引用至 selectNodes 方法選取出節點的節點集物件 例如:

objNodeList.removeAll

如圖 3-6

圖 3-6 利用 XPATH 刪除節點

3-1-15:節點的屬性新增刪除與取得

屬性的取得:

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

Node 物件變數.getAttribute(屬性名稱)

@Node 物件變數

欲取得屬性節點,則可以用 getAttributeNode 方法。

Node 物件變數.getAttributeNode(屬性名稱)

@Node 物件變數 removeAttribute 方法:

Node 物件變數.removeAttribute(屬性名稱)

@屬性名稱

引用欲刪除屬性之節點的物件變數

@屬性名稱

欲刪除屬性的名稱

objCurNode.removeAttribute(“sale”) 如下圖 3-7

圖 3-7 屬性的取得

圖 3-8 屬性的刪除

3-2 SAX 介紹

Org.xml.sax 提供撰寫 SAX 程式的類別與介面 Org.xml.sax.exl 提供撰寫 SAX 程式的延伸類別與

介面

Org.xml.sax.helpers 提供撰寫 SAX 程式的類別與介面

SAX 的運作方式和 DOM 非常的不同,DOM 剖析器在完成 XML 文件

2:難以計形複雜的搜尋

缺點:

1:DOM 比 SAX 佔記憶體,因為 DOM 必須把整份文件載入記憶體中,所 以所需的記憶體會比 SAX 大,所以必須要比較大的記憶體資源。

2:因為 DOM 會比 SAX 速度慢,因為 DOM 必須呼叫函式庫,再去做 XML 文件的存取動作,不如 SAX 一邊剖析且一邊呼叫 FUNCTION,所以當 資料量大時 DOM 會變的很慢,沒有效率。

相關文件