|
2#
楼主 |
发表于 2013-9-28 11:30:21
|
只看该作者
如何使用 XML OLE DB 简单提供程序访问分层 XML 数据
(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 简单提供程序的 XML (XML OSP) 可以用于加载一个在 XML 文档中的分层数据到一个只读的 ADO 记录集中,可以使用 ADO Recordset 对象的标准方法来读取或访问这些数据。XML OSP 提供了一种处理 XML 文档中所包含的数据的不同的方法。
本文章分步指导来创建 Visual Basic 6.0 示例演示如何使用 XML OSP 访问 XML 文档中包含的分层数据。
1. 用Microsoft 记事本创建一个空文件。将以下 XML 复制并粘贴到文件中并将其保存为 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>
复制代码 2. 在 Visual Basic 中打开一个标准 EXE 项目。默认情况下,将创建 Form1。
3. 在项目添加 Microsoft ActiveX Data Objects 2.6 library 引用。
4. 向 Form1 中添加一个命令按钮 Command1。
5. 复制和粘贴以下代码到窗体模块中,在 adoRS.Open 语句中指定 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
复制代码 6. 保存该项目并运行。单击 Form1 上的命令按钮,运行 Visual Basic ActiveX Data Object (ADO) 代码使用 XML OSP 加载 portfolio.xml 中的数据到 ADO 记录集对象。该代码然后调用 printtbl 子过程,并将已加载的 ADO 记录集作为输入参数传递给该过程。printtbl 子过程中的代码循环遍历记录集,并在调试窗口(立即窗口)中打印其内容。如果在 Visual Basic 集成的开发环境 (IDE) 中调试窗口(立即窗口)不可见,按 CTRL G 键可打开调试窗口(立即窗口)。 |
|