Frank Rice
Microsoft Corporation
适用于:
Microsoft Office Access 2003
摘要: Microsoft Office 2003 增加了许多用于处理 XML 数据的重要功能。本文探究了 Microsoft Office Access 2003 中与 XML 相关的对象、方法和属性。同时,本文还提供了有关这些新成员的详细信息,以及用于说明其用途的代码示例。阅读完本文后,您将更好地了解如何在自己的解决方案中应用这些功能。
注 本文是以前作为“Using the XML Features of the Microsoft Office Access 2003 and Microsoft Office Excel 2003 Object Models”(使用 Microsoft Office Access 2003 和 Microsoft Office Excel 2003 对象模型中的 XML 功能)发表的两篇文章中的一篇。根据客户反馈,我们现在已经将该文章作为两篇独立的文章重新发表。有关 Excel 的 XML 功能的详细信息,请参阅 MSDN 姊妹篇:Using the XML Features of the Excel 2003 Object Model。
本页内容
背景知识
对 Access 2003 中的 XML 对象模型进行的更改
使用 Access 中的 XML 的代码示例
使用 Access 2003 XML 对象模型
小结
背景知识
Microsoft Access 2002 是第一个添加了对可扩展标记语言 (XML) 的支持的 Access 版本。在 Access 2002 中,您可以导入 XML 架构定义 (XSD) 语言文件中包含的 XML 数据的结构,还可以导入 XML 数据。XSD 语言定义了 XML 标记的结构以及它们包含的数据。您还可以将 XML 数据与其架构一起导出到外部 XSD 文件,或者直接嵌入到 XML 数据文件中。最后,在 Access 2002 中,当导出 XML 来定义数据的外观时,您可以包含一个可扩展样式表语言 (XSL) 文件。该 XSL 文件与超文本标记语言 (HTML) 文件一起创建以便在本地计算机上显示数据,或者与 Active Server Page (ASP) 一起创建以便在服务器上显示数据。
从编程角度而言,Access 2002 添加了两个用于处理 XML 的新方法:ImportXML 和 ExportXML。ImportXML 方法用于将 XML 数据和架构信息导入到 Microsoft SQL Server 2000 Desktop Engine、Microsoft SQL Server 7.0 或更高版本或者 Microsoft Jet Database Engine 中。ExportXML 方法使您可以从 SQL Server 2000 Desktop Engine、SQL Server 6.5 或更高版本或者 Microsoft Jet Database Engine 中导出 XML 数据、架构和演示文稿信息。
对 Access 2003 中的 XML 对象模型进行的更改
Access 2003 通过添加可选参数 OtherFlags、UseSort、UseFilter 和 AdditionalData 更新了 ExportXML 方法,以便支持诸如导出相关表和保持现有排序和筛选器的功能。此外,它还添加了 AdditionalData 对象和 TransformXML 方法。本部分提供了一系列示例代码片段,以说明上述方法和对象的用法。本部分还详细介绍了上述 Access 对象模型补充和更改的详细信息。
使用 Access 中的 XML 的代码示例
下面的示例提供了一些示例代码,用于说明如何使用 Access 对象模型中与 XML 相关的成员来执行各种操作:
将数据、架构、格式设置和相关表导出到 XML
该子例程将当前数据库中名为 Orders 的表以及一些相关表导出到一个 XML 文件中。架构和格式设置还分别被导出为单独的 .xsd 和 .xsl 文件。现有文件会被改写。该过程假设您具有一个数据库,它含有下列表:Categories、Customers、Employees、Orders、Orders Details、Orders Details Details、Products、Product Details、Product Details Details、Shippers 和 Suppliers。您还需要一个格式化为 C: 的硬盘驱动器来依照原样运行该过程。
Private Sub ExportRelTables() ' Purpose: Exports the Orders table as well as ' a number of related database to an XML file. ' XSD and XSL files are also created. Dim objAD As AdditionalData ' Create the AdditionalData object. Set objAD = Application.CreateAdditionalData ' Add the related tables to the object. With objAD .Add "Order Details" objAD(Item:="Order Details").Add "Order Details Details" .Add "Customers" .Add "Shippers" .Add "Employees" .Add "Products" objAD(Item:="Products").Add "Product Details" objAD(Item:="Products")(Item:="Product Details").Add _ "Product Details Details" .Add "Suppliers" .Add "Categories" End With Application.ExportXML acExportTable, "Orders", _ "C:\Orders.xml", "C:\OrdersSchema.xsd", _ "C:\OrdersStyle.xsl", AdditionalData:= objAD End Sub
将 Access 报表导出到 XML
该过程将当前数据库中的 Invoice 报表导出到一个 XML 文件中。它还可以导出演示文稿信息,并将图像放在 Images 文件夹中。该过程将该报表导出到默认的 HTML 包装中。此外,它还创建了一个包含 ReportML 列表的文件。ReportML 是一种语言,用于描述 Access 窗体、报表和数据访问页的结构以及它们的事件和属性。有关 ReportML 的详细信息,请参阅文章 About ReportML in Access 2002。该过程假设您具有一个含有名为 Invoice 的报表的数据库。您还需要一个格式化为 C: 的硬盘驱动器来依照原样运行该过程。
Private Sub ExportReport() ' Purpose: Exports the Invoice table as well as ' the presentation and image files. In addition, ' a file containing the ReportML is created as ' denoted by setting the OtherFlags flag equal ' to 16. Const CREATE_REPORTML = 16 Application.ExportXML _ ObjectType:=acExportReport, _ DataSource:="Invoice", _ DataTarget:="C:\Invoice.xml", _ PresentationTarget:="C:\InvoiceReport.xsl", _ ImageTarget:="C:\Images", _ OtherFlags:=CREATE_REPORTML End Sub
导入 XML 文件的结构和数据
下面的子例程将一个 XML 文件的数据和结构导入到当前数据库的表中。该表的名称是该 XML 文件中的根元素。如果具有该名称的表已经存在,则 Access 会将一个数字追加到该表的名称中。
Private Sub ImportXMLFile() ' Purpose: Imports the data and structure of an ' XML file. Const STRUCTURE_AND_DATA = 1 Application.ImportXML DataSource:="C:\Orgchart.xml", _ ImportOptions:=STRUCTURE_AND_DATA End Sub
使用 DOM 转换数据
该子例程将一个 XML 文件中的数据加载到一个 DOMDocument 对象中,使用该 XSL 文件来转换数据,然后将结果保存到另一个 XML 文件中。有关 DOMDocument 对象和 DOM 的详细信息,请参阅 Unlocking Office XML Data Through the XML Document Object Model。有关使用 XSL Transformations (XSLT) 来转换 XML 文件的详细信息,请参阅 Transforming Microsoft Access XML Files into HTML with XSLT。
Sub XformXML() ' Purpose: Loads XML data into a DOMDocument object, ' applies a transform, and then save the result to ' a different XML file. Application.TransformXML _ DataSource:="C:\EmployeesMapped.xml", _ TransformSource:="C:\SortNames.xsl", _ OutputTarget:="C:\XformedEmployees.xml", _ WellFormedXMLOutput:=False End Sub
使用 Access 2003 XML 对象模型
下面的表格提供了有关在上述代码示例中说明的对象和方法的更多详细信息。
ExportXML 方法
将指定 Access 对象的数据、架构和/或演示文稿信息导出为 XML 文件。
语法
expression.ExportXML (ObjectType As AcExportXMLObjectType, DataSource As String, Optional DataTarget As String, Optional SchemaTarget As String, Optional PresentationTarget As String, Optional ImageTarget As String, Optional Encoding As AcExportXMLEncoding, Optional OtherFlags As Long, Optional UseFilter As Boolean, Optional UseSort as Boolean, Optional AdditionalData As AdditionalData)
表 1. ExportXML 方法的参数
参数 |
类型 |
说明 |
---|---|---|
ObjectType |
AcExportXMLObjectType |
要导出的 Access 对象的类型。 |
DataSource |
String |
要导出的 Access 对象的名称。默认情况下为类型由 ObjectType 指定的当前打开的对象。 |
DataTarget |
String |
导出的数据的文件名和路径。如果省略该参数,则不会导出数据。 |
SchemaTarget |
String |
导出的架构信息的文件名和路径。如果省略该参数,则架构信息会嵌入到数据文档中。 |
PresentationTarget |
String |
导出的演示文稿信息的文件名和路径。如果省略该参数,则不会导出演示文稿信息。 |
ImageTarget |
String |
导出的图像的路径。如果省略该参数,则不会导出图像。 |
Encoding |
AcExportXMLEncoding |
用于导出的 XML 的文本编码。默认为 UTF8 编码。 |
OtherFlags |
Long |
数值表达式,它是指定其他应该使用的标志的值的和。这些标志及其值如下所示: |
UseFilter |
Boolean |
如果值为 True,则使用对象的 Filter 属性来构建 WHERE 子句。如果值为 False,则不会向 WHERE 子句添加任何内容。默认值为 False。 |
UseSort |
Boolean |
如果值为 True,则使用 Sort 属性来构建 ORDER BY 子句。如果值为 False,则不会向 ORDER BY 子句添加任何内容。默认值为 False。 |
AdditionalData |
AdditionalData |
用于描述要导出的其他表的对象。如果指定了 acLiveReportSource,则将忽略该参数。 |
表 2. 有关AcExportXMLOtherFlags 参数的详细信息
参数 |
说明 |
值 |
---|---|---|
acEmbedSchema |
将架构嵌入到 XML 文件中。 |
1 |
acExcludePrimaryKeyAndIndexes |
导出 ReportML。 |
2 |
acRunFromServer |
创建 ASP 包装;否则,默认为 HTML 包装。仅适用于报表。 |
4 |
acLiveReportSource |
包含实时数据的报表的连接信息。仅适用于报表。 |
8 |
acPersistReportML |
不导出主键字段和索引。 |
16 |
下面的代码示例将当前数据库中名为 Customers 的表导出到一个 XML 文件中;将数据和架构导出为单独的文件。
Application.ExportXML _ ObjectType:=acExportTable, _ DataSource:="Customers", _ DataTarget:="Customers.xml", _ SchemaTarget:="CustomersSchema.xml"
下面的示例将当前数据库中名为 Fall2000 的报表导出到一个 XML 文件中。该示例还导出了演示文稿信息,并将图像放在指定的目录中。它用 ASP 包装(而不是默认的 HTML 包装)导出该报表。
Application.ExportXML _ ObjectType:=acExportReport, _ DataSource:="Fall2000", _ DataTarget:="Fall2000.xml", _ PresentationTarget:="Fall2000Report.xsl", _ ImageTarget:="Images", _ OtherFlags:=acRunFromServer
AdditionalData 对象
除了基表以外,还包含在导出相关表时导出的任何附加表。
Add 方法
添加 AdditionalData 对象。
示例
该语句可添加一个名为 Name 的 AdditionalData 对象,并将其返回到调用过程。
AdditionalData.Add(Name As String) As AdditionalData
下面的示例将 Northwind Traders 示例数据库中的 Customers 表的内容随同 Orders 和 Orders Details 表的内容一起导出到一个名为 Customer Orders.xml 的 XML 数据文件中。
Sub ExportCustomerOrderData() Dim objOrderInfo As AdditionalData Set objOrderInfo = Application.CreateAdditionalData ' Add the Orders and Order Details tables to the data to be exported. objOrderInfo.Add "Orders" objOrderInfo.Add "Order Details" ' Export the contents of the Customers table. The Orders and Order ' Details tables will be included in the XML file. Application.ExportXML ObjectType:=acExportTable, DataSource:="Customers", _ DataTarget:="Customer Orders.xml", _ AdditionalData:=objOrderInfo End Sub
Name 属性
返回在 Add 方法中指定的 AdditionalData 对象的 Name。这是一个只读属性。
示例
AdditionalData.Name As String
ImportXML 方法
从一个或多个 XML 文件中导入 Access 对象的数据和/或演示文稿信息。
语法
expression.ImportXML(DataSource As String, ImportOptions As Long)
表 3. ImportXML 方法的参数
参数 |
类型 |
说明 |
---|---|---|
DataSource |
String |
要导入的 XML 文件的名称和路径。 |
ImportOptions |
AcImportXMLOption |
位掩码,指定其他与从 XML 中进行导入相关联的行为。下表说明了由特定值产生的行为;可以添加值以指定行为组合。 |
表 4. ImportXML 方法的枚举
枚举 |
说明 |
值 |
---|---|---|
acStructureOnly |
仅导入架构。 |
0 |
acStructureAndData |
同时导入数据和架构。 |
1 |
acAppendData |
将数据追加到现有表中。 |
2 |
下面的示例将一个 XML 文件导入到当前数据库中一个名为 Employees 的新表中。
Application.ImportXML _ DataSource:="employees.xml", _ ImportOptions:=acStructureAndData
TransformXML 方法
该方法将 DataSource 参数加载到一个 DOMDocument 对象中,应用 TransformSource 参数,然后将结果保存到 OutputTarget 参数中。
语法
expression.TransformXML(DataSource As String, TransformSource As String, OutputTarget As String, WellFormedXMLOutput As Boolean = False, ScriptOption As AcTransformXMLScriptOption = acPromptObjects)
表 5. TransformXML 方法的参数
参数 |
类型 |
说明 |
---|---|---|
DataSource |
String |
要导入的 XML 文件的名称和路径。这可以是 URL 或文件路径。 |
TransformSource |
String |
要应用于 DataSource 的 XSL 文件。 |
OutputTarget |
String |
在应用 TransformSource 以后得到的结果数据的文件名和路径。如果 OutputTarget 等于 DataSource,则将用 TransformSource 的输出改写 DataSource。 |
WellFormedXMLOutput |
Boolean |
如果值为 True,则使用 DOM 的 TransformNodeToObject 方法。这要求输出是格式规范的 XML。如果值为 False,则使用 DOM 的 TransformNode 方法。这不要求输出是格式规范的 XML。默认值为 False。 |
ScriptOption |
AcTransformXMLScriptOptions |
如果设置为 acPromptObjects,则转换过程中在脚本中创建任何对象之前,将显示提示。如果设置为 acEnableObjects,则任何脚本都将自动运行。如果设置为 acDisableObjects,则转换过程在试图创建任何对象时都将失败。默认值为 acPromptObjects。 |
下面的示例使用名为 Transform.xsl 的 XSLT 转换,将名为 Input.xml 的文件转换为名为 Newfile.xml 的文件:
Application.TransformXML "C:\Input.xml", _ "C:\Transform.xsl","C:\Newfile.xml"
小结
在本文中,我们讨论了最新版本的 Access 中的 XML 功能。Access 2003 添加了多项新的 XML 功能,这些功能使您能够通过导入和导出数据与 XML 进行交互(同时还能完成其他一些工作)。您可以将这些对象和方法添加到自己的应用程序中,以使其更加通用和有用。