技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 71645
|
2#
樓主 |
發(fā)表于 2013-9-28 11:30:21
|
只看該作者
如何使用 XML OLE DB 簡(jiǎn)單提供程序訪問(wèn)分層 XML 數(shù)據(jù)
(How To Access Hierarchical XML Data with the XML OLE DB Simple Provider)
朱亦文譯(2013-09-28)
原諒地址:
http://support.microsoft.com/kb/271772/en-us
http://support.microsoft.com/kb/271772/zh-cn?spid=683&sid=273
概要
OLE DB 簡(jiǎn)單提供程序的 XML (XML OSP) 可以用于加載一個(gè)在 XML 文檔中的分層數(shù)據(jù)到一個(gè)只讀的 ADO 記錄集中,可以使用 ADO Recordset 對(duì)象的標(biāo)準(zhǔn)方法來(lái)讀取或訪問(wèn)這些數(shù)據(jù)。XML OSP 提供了一種處理 XML 文檔中所包含的數(shù)據(jù)的不同的方法。
本文章分步指導(dǎo)來(lái)創(chuàng)建 Visual Basic 6.0 示例演示如何使用 XML OSP 訪問(wèn) XML 文檔中包含的分層數(shù)據(jù)。
1. 用Microsoft 記事本創(chuàng)建一個(gè)空文件。將以下 XML 復(fù)制并粘貼到文件中并將其保存為 portfolio.xml:- <portfolio>
- <stock>
- <symbol>MSFT</symbol>
- <price>$66.00</price>
- <info>
- <companyname>Microsoft Corporation</companyname>
- <website><a href="http://www.microsoft.com" target="_blank">http://www.microsoft.com</a></website>
- </info>
- </stock>
- <stock>
- <symbol>AAPL</symbol>
- <price>$110.00</price>
- <info>
- <companyname>Apple Computer, Inc.</companyname>
- <website><a href="http://www.apple.com" target="_blank">http://www.apple.com</a></website>
- </info>
- </stock>
- <stock>
- <symbol>DELL</symbol>
- <price>$50.00</price>
- <info>
- <companyname>Dell Corporation</companyname>
- <website><a href="http://www.dell.com" target="_blank">http://www.dell.com</a></website>
- </info>
- </stock>
- <stock>
- <symbol>INTC</symbol>
- <price>$136.00</price>
- <info>
- <companyname>Intel Corporation</companyname>
- <website><a href="http://www.intel.com" target="_blank">http://www.intel.com</a></website>
- </info>
- </stock>
- </portfolio>
復(fù)制代碼 2. 在 Visual Basic 中打開一個(gè)標(biāo)準(zhǔn) EXE 項(xiàng)目。默認(rèn)情況下,將創(chuàng)建 Form1。
3. 在項(xiàng)目添加 Microsoft ActiveX Data Objects 2.6 library 引用。
4. 向 Form1 中添加一個(gè)命令按鈕 Command1。
5. 復(fù)制和粘貼以下代碼到窗體模塊中,在 adoRS.Open 語(yǔ)句中指定 portfolio.xml 的路徑:- Private Sub Command1_Click()
- Dim adoRS As ADODB.Recordset
- Set adoRS = New ADODB.Recordset
-
- ' Set up the Connection
- adoRS.ActiveConnection = "Provider=MSDAOSP; Data Source=MSXML2.DSOControl.2.6;"
-
- ' Open the XML source
- adoRS.Open "<path to portfolio.xml>"
- On Error GoTo RecError
- printtbl adoRS, 0
-
- GoTo Bye
-
- RecError:
- Debug.Print Err.Number & ": " & Err.Description
- If adoRS.State = adStateOpen Then
- For Each Col In adoRS.Fields
- Debug.Print Col.Name & ": " & Col.Status ' Error Status
- Next Col
- End If
-
- Bye:
- If adoRS.State = adStateOpen Then
- adoRS.Close
- End If
- Set adoRS = Nothing
- End Sub
- ' Function to recursively retrieve the data
- Sub printtbl(rs, indent)
- On Error Resume Next
-
- Dim rsChild As ADODB.Recordset
- Dim Col As ADODB.Field
-
- While rs.EOF <> True
- For Each Col In rs.Fields
- If Col.Name <> "$Text" Then ' $Text to be ignored
- If Col.Type <> adChapter Then
- ' Output the non-chaptered column
- Debug.Print Space(indent) & Col.Name & ": " & Col.Value,
- Else
- Debug.Print
- ' Retrieve the Child recordset
- Set rsChild = Col.Value
- rsChild.MoveFirst
- If Err Then MsgBox Error
- printtbl rsChild, indent + 4
- rsChild.Close
- Set rsChild = Nothing
- End If
- End If
- Next
- Debug.Print
- rs.MoveNext
- Wend
-
- End Sub
復(fù)制代碼 6. 保存該項(xiàng)目并運(yùn)行。單擊 Form1 上的命令按鈕,運(yùn)行 Visual Basic ActiveX Data Object (ADO) 代碼使用 XML OSP 加載 portfolio.xml 中的數(shù)據(jù)到 ADO 記錄集對(duì)象。該代碼然后調(diào)用 printtbl 子過(guò)程,并將已加載的 ADO 記錄集作為輸入?yún)?shù)傳遞給該過(guò)程。printtbl 子過(guò)程中的代碼循環(huán)遍歷記錄集,并在調(diào)試窗口(立即窗口)中打印其內(nèi)容。如果在 Visual Basic 集成的開發(fā)環(huán)境 (IDE) 中調(diào)試窗口(立即窗口)不可見,按 CTRL G 鍵可打開調(diào)試窗口(立即窗口)。 |
|