日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
XML DOM新手入門指南

DOM 定義了分析程序應(yīng)當顯露的標準命令集,使您能夠在程序中訪問 HTML 和 XML 文檔內(nèi)容。支持 DOM 的 XML 分析程序取出 XML 文檔中的數(shù)據(jù),并通過一組可以對它編程的對象來顯露它。在這篇文章中,您將學會當 XML 文檔被 Microsoft(R) XML Parser 顯露之后,如何通過執(zhí)行 XML DOM 來訪問和操作它 (Msxml.dll)。

在往下閱讀之前,應(yīng)當看一下原始的 XML 文件,以便對分析程序如何使您的生活更加輕松有個概念。下面的代碼顯露了含有壓縮盤項目的文件 Cds.xml 的內(nèi)容。每一項都含有諸如藝術(shù)家、標題和曲目等信息。

 
 
 
  1.  
  2.  
  3.  
  4.    
  5.     Frank Sinatra 
  6.     In The Wee Small Hours 
  7.   
  8.   In The Wee Small Hours 
  9.   Mood Indigo   
  10.   Glad To Be Unhappy 
  11.   I Get Along Without You Very Well 
  12.   
  13.     $12.99 
  14.    
  15.    
  16.     The Offspring 
  17.     Americana 
  18.   
  19.   Welcome 
  20.   Have You Ever   
  21.   Staring At The Sun 
  22.   Pretty Fly (For A White Guy) 
  23.   
  24.     $12.99 
  25.    
  26.  

以上文檔的第二行涉及外部的 DTD,或者叫做“文檔類型定義”文件。DTD 定義了特定類型 XML 文檔的布局和預(yù)期內(nèi)容。XML 分析程序可以使用 DTD 來確定文檔是否有效。DTD 僅是一種方法,可以使用它幫助分析程序驗證文檔。還有一個越來越流行的驗證文檔的方法就是“XML 架構(gòu)”。和 DTD 不同的是,我們使用 XML 定義架構(gòu),而 DTD 則使用它們自己“有趣的”語法。下面的代碼顯示了 Cds.xml 使用的 Cds.dtd 的內(nèi)容:

 
 
 
  1.  
  2.   
  3.    
  4.    
  5.     
  6.    
  7.     
  8.    
  9.    
  10.    

這篇文章并不打算深入探討 DTD 和“XML架構(gòu)”。XML架構(gòu)語言是基于XML數(shù)據(jù)注釋(符合 W3C)的。

DOM 的確切定義是什么?

XML 的 DOM 是個對象模型,它顯露 XML 文檔的內(nèi)容。W3C 的文檔對象模型 (DOM) 1 級規(guī)格 通常定義了 DOM 應(yīng)當顯露為什么屬性、方法和事件。Microsoft 的 DOM 執(zhí)行方法完全支持 W3C 標準,它的一些其他特性更便于在程序中使用 XML 文件。

如何使用 XML Dom?

通過創(chuàng)建 XML 分析程序的實例來使用 XML DOM。為此,Microsoft 通過 Msxml.dll 中的一組標準 COM 界面來顯露 XML DOM。Msxml.dll 含有使用 XML 文檔時用到的類庫和執(zhí)行代碼。如果您正在使用有腳本的客戶程序,如 Internet Explorer 中的 VBScript 執(zhí)行,則通過用 CreateObject 方法創(chuàng)建分析程序?qū)ο蟮膶嵗瑏硎褂?DOM。

 
 
 
  1. Set objParser = CreateObject( "Microsoft.XMLDOM" )  

如果您正在使用來自 Active Server Page(ASP) 的 VBScript,則應(yīng)當使用 Server.CreateObject。

 
 
 
  1. Set objParser = Server.CreateObject( "Microsoft.XMLDOM" )  

如果您正在使用 Visual Basic,可以通過設(shè)置對 MSXML 類庫(在 Msxml.dll 中提供)的引用來訪問 DOM。從 Visual Basic 6.0 內(nèi)部使用 MSXML 的步驟為:

◆打開工程引用對話框。

◆從可用的 COM 對象的列表中選擇 Microsoft XML,v2.0。如果沒有找到該項,則先要獲得 MSXML 類庫。

◆這時可以創(chuàng)建分析程序?qū)ο髮嵗?/p>

 
 
 
  1. Dim xDoc As MSXML.DOMDocument  
  2. Set xDoc = New MSXML.DOMDocument  

從何處可以找到 Msxml.dll?獲得 MSXML 類庫的辦法有兩種:

可以安裝 Internet Explorer 5.0— MSXML 分析程序是一個完整的組件。

◆另一個辦法就是下載可再分布的 Microsoft XML Parser 版本。

◆在 Visual Basic 項目中引用了類庫之后,就可以調(diào)用分析程序,加載文檔,使用文檔中的數(shù)據(jù)。

也許您現(xiàn)在正在疑惑—;我現(xiàn)在使用的是什么?如果您打開了 MSXML 類庫,并用 Visual Basic 6.0 對象瀏覽器檢查它的對象模型,就會發(fā)現(xiàn),對象模型是如此豐富。這篇文章示范了如何使用 DOMDocument 類和 IXMLDOMNode 接口來訪問 XML 文檔。

#p#

如何加載文檔?

要加載 XML 文檔,首先必須創(chuàng)建 DOMDocument 類的實例:

 
 
 
  1. Dim xDoc As MSXML.DOMDocument  
  2. Set xDoc = New MSXML.DOMDocument 

當獲得了有效的引用之后,使用加載方法打開文件。MSXML 分析程序能從本地磁盤上加載 XML 文檔,在網(wǎng)上則用 UNC 引用或通過 URL 加載文檔。若要從磁盤加載文檔,請使用加載方法創(chuàng)建下面的構(gòu)造:

 
 
 
  1. If xDoc.Load("C:\My Documents\cds.xml") Then  
  2.  ' 文檔加載成功。  
  3.  ' 現(xiàn)在做一些有趣的事情。  
  4. Else  
  5.  ' 文檔加載不成功。  
  6. End If 

用完該文檔之后,需要將您的對象引用釋放給它。MSXML 分析程序并不顯露明確的關(guān)閉方法。***的方法是將引用明確設(shè)置為Nothing。

 
 
 
  1. Set xDoc = Nothing 

當要求分析程序加載文件時,在默認情況下,它是非同步執(zhí)行的。改變該文檔的布爾 Async 屬性可以改變這個特性。重要的是檢查文檔的 ReadyState 屬性,保證文檔在開始檢查它的內(nèi)容之前就已經(jīng)就緒。ReadyState 屬性可能返回的值為下列 5 種之一:

MSXML 分析程序顯露了在加載大的文檔時可以跟蹤加載進程狀態(tài)的事件。當在 Internet 上從 URL 非同步加載文檔時,這些事件也有用。若要從 URL 打開文件,請使用完整格式的 URL 指定文件的位置。在文件位置前面必須加 http:// 前綴。這里是從 URL 加載文件的例子:

 
 
 
  1. xDoc.async = False 
  2. If xDoc.Load("http://www.develop.com/hp/brianr/cds.xml") Then  
  3.  ' 文檔加載成功。  
  4.  ' 現(xiàn)在做一些有趣的事情。  
  5. Else  
  6.  ' 文檔加載不成功。  
  7. End If 

將文檔的 Async 屬性設(shè)置為 False,分析程序在文檔被完全加載并可以對其進行操作之前,不將控制返回到您的代碼。如果將其設(shè)置為True,您必須在訪問該文檔之前先檢查其 ReadyState 屬性,或者利用 DOMDocument 的事件,在文檔就緒時通知您的代碼。

處理故障

由于各種各樣的原因,文檔加載很可能失敗。其中最常見的原因可能是傳送到加載方法的文檔名無效。另一個原因可能是 XML 文檔本身是無效的。

在默認情況下,MSXML 分析程序?qū)Ⅱ炞C在您的文檔中是否指定了 DTD 或架構(gòu)。如果在調(diào)用加載方法之前設(shè)置了 DOMDocument 對象引用的 ValidateOnParse 屬性,就令分析程序不驗證文檔。

 
 
 
  1.  Dim xDoc As MSXML.DOMDocument  
  2.  Set xDoc = New MSXML.DOMDocument  
  3. xDoc.validateOnParse = False 
  4. If xDoc.Load("C:\My Documents\cds.xml") Then  
  5.  ' 文檔加載成功。  
  6.  ' 現(xiàn)在做一些有趣的事情。  
  7. Else  
  8.  ' 文檔加載不成功。  
  9. End If 

但要事先警告您:在制作應(yīng)用程序時關(guān)閉分析程序的驗證特性并不是好方法。不正確的文檔因各種理由導(dǎo)致程序的失敗。至少,它會向用戶提供無效的數(shù)據(jù)。

不管何種故障的類型,都可以通過訪問ParseError對象,要求分析程序向您提供故障信息。若要利用ParseError對象的屬性,請將引用設(shè)置為文檔自身的 IXMLDOMParseError 界面。IXMLDOMParseError界面顯露了7種屬性,可以用來研究錯誤的原因。下面的例子顯示一個消息框,以及ParseError對象給出的所有錯誤信息。

 
 
 
  1.  Dim xDoc As MSXML.DOMDocument  
  2.  Set xDoc = New MSXML.DOMDocument  
  3. If xDoc.Load("C:\My Documents\cds.xml") Then  
  4.  ' 文檔加載成功。  
  5.  ' 現(xiàn)在做一些有趣的事情。  
  6. Else  
  7.  ' 文檔加載不成功。  
  8.  Dim strErrText As String  
  9.  Dim xPE As MSXML.IXMLDOMParseError  
  10.    ' 獲得 ParseError 對象  
  11.  Set xPE = xDoc.parseError  
  12.    With xPE  
  13.     strErrText = "Your XML Document failed to load" & _  
  14.         "due the following error." & vbCrLf & _  
  15.         "Error #: " & .errorCode & ": " & xPE.reason & _  
  16.         "Line #: " & .Line & vbCrLf & _  
  17.         "Line Position: " & .linepos & vbCrLf & _  
  18.         "Position In File: " & .filepos & vbCrLf & _  
  19.         "Source Text: " & .srcText & vbCrLf & _  
  20.         "Document URL: " & .url  
  21.     End With  
  22.       
  23.     MsgBox strErrText, vbExclamation  
  24. End If  
  25. Set xPE = Nothing 

可用 ParseError 對象顯露的信息,將該信息顯示給用戶,將它記錄到錯誤文件中,或者自己試著糾正錯誤。

#p#

在XML文檔中檢索信息

加載文檔之后,下一步就是從文檔中檢索信息。雖然文檔對象是重要的,但仍可發(fā)現(xiàn),在大部分時間里都在使用 IXMLDOMNode 接口。利用 IXMLDOMNode 接口來讀寫單獨的節(jié)點元素。在做任何事情之前,必須了解 MSXML 分析程序通常支持的 13 種節(jié)點類型。下表列出了幾種最常遇見的節(jié)點類型。

通過 IXMLDOMNode 接口顯露的兩個屬性來訪問節(jié)點類型。NodeType 屬性顯露了 DOMNodeType 項目的枚舉(其中有些已列入上面的表中)。此外,還可以用 NodeTypeString 來檢索節(jié)點類型的文本串。

當有了文檔的引用之后,就可以開始在節(jié)點的層次中來回移動了。從您的文檔引用可以訪問 ChildNodes 屬性,它提供了從上到下的入口,可以到達文檔中的所有節(jié)點。ChildNodes 屬性顯露了 IXMLDOMNodeList,它支持 Visual Basic For/Each 構(gòu)造。因此,您可以枚舉 ChildNodes 屬性的所有單個節(jié)點。此外,ChildNodes 屬性顯露 Level 屬性,它可以返回現(xiàn)有子節(jié)點的數(shù)量。

文檔對象不僅顯露了 ChildNodes 屬性,還顯露了所有單個節(jié)點。這樣,與 IXMLDOMNode 的 HasChildNodes 屬性聯(lián)合起來,就使得在節(jié)點層次中來回移動來檢查元素、屬性和值,變得十分簡單。

需要提醒的一件事情就是,文檔元素和元素值之間的主從關(guān)系。例如,在 CD XML 文檔中,元素<標題>顯露了一首歌的標題。要檢索<標題>元素的實際值,需要尋找 NODE_TEXT 類型的節(jié)點。當找到了具有感興趣數(shù)據(jù)的節(jié)點之后,就可以檢查屬性,甚至通過 ParentNode 屬性到達并訪問其主節(jié)點。

如何在文檔中來回移動?

在 XML 文檔中,可以在一組被文檔對象顯露的節(jié)點中來回移動。因為 XML 文檔本來就是分層的,所以編寫在整個文檔中來回移動的遞歸例程要相對容易些。LoadDocument 例程打開 XML 文檔。然后 LoadDocument 調(diào)用另一個例程 DisplayNode,它在文檔中真正地來回移動。LoadDocument 將引用當作參數(shù)和整數(shù)值傳遞到當前打開的 XML 文檔的 ChildNodes 屬性,指定從何處開始縮排級。代碼使用縮排參數(shù),在文檔結(jié)構(gòu)的 Visual Basic“快速窗口”中,將文本的顯示格式化。

DisplayNode 函數(shù)在文檔中來回移動,尋找特定于 NODE_TEXT 類型的節(jié)點。當代碼找到了 NODE_TEXT 類型的節(jié)點之后,它用 NodeValue 屬性來檢索該節(jié)點的文本。此外,當前節(jié)點的 ParentNode 屬性被用來獲得 NODE_ELEMENT 類型節(jié)點的回溯引用。NODE_ELEMENT 類型的節(jié)點顯露了 NodeName 屬性。NodeName 和 NodeValue 的內(nèi)容被顯示。

如果通過檢查 HasChildNodes 屬性,確定該節(jié)點有子節(jié)點,則 DisplayNode 遞歸調(diào)用其自身,直到到達該文檔的末尾。DisplayNode 例程用 Debug.Print 將信息寫入 Visual Basic 的“快速窗口”:

 
 
 
  1. Public Sub LoadDocument()  
  2. Dim xDoc As MSXML.DOMDocument  
  3. Set xDoc = New MSXML.DOMDocument  
  4. xDoc.validateOnParse = False 
  5. If xDoc.Load("C:\My Documents\sample.xml") Then  
  6.  ' 文檔加載成功。  
  7.  ' 現(xiàn)在做一些有趣的事情。  
  8.  DisplayNode xDoc.childNodes, 0  
  9. Else  
  10.  ' 文檔加載不成功。  
  11.  ' 查看前面列出的錯誤信息。  
  12. End If  
  13. End Sub  
  14.  
  15. Public Sub DisplayNode(ByRef Nodes As MSXML.IXMLDOMNodeList, _   
  16.  ByVal Indent As Integer)  
  17.    
  18.  Dim xNode As MSXML.IXMLDOMNode  
  19.  IndentIndent = Indent + 2  
  20.  
  21.  For Each xNode In Nodes  
  22.   If xNode.nodeType = NODE_TEXT Then  
  23.    Debug.Print Space$(Indent) & xNode.parentNode.nodeName & _  
  24.     ":" & xNode.nodeValue  
  25.   End If  
  26.  
  27.   If xNode.hasChildNodes Then  
  28.    DisplayNode xNode.childNodes, Indent  
  29.   End If  
  30.  Next xNode  
  31. End Sub 

DisplayNode用HasChildNodes屬性來確定它是否應(yīng)當再調(diào)用其自身。您還應(yīng)當用節(jié)點的Level屬性并檢查大于0的值。

【編輯推薦】

  1. 構(gòu)建輕量級XML DOM分析程序
  2. 在JavaScript中如何實現(xiàn)DOM操作
  3. 減少瀏覽器重解析 JavaScript DOM操作優(yōu)化方案 

網(wǎng)站標題:XML DOM新手入門指南
URL地址:http://www.5511xx.com/article/dhohocp.html