Frank C. Rice
Microsoft Corporation
适用于:
Microsoft® Office Word 2003
摘要: Microsoft Office Word 2003 添加了很多与使用 XML 相关的功能。这些功能集成在新增的任务窗格、菜单选项以及对象模型的添加中。在本文中,我们将会从用户界面以及编程角度分析其中一些功能。
下载 odc_wd11xml.exe。
本页内容
简介
示例纯备忘录模板
附加架构
显示 XML 结构窗格
将元素添加到文档
XML 结构窗格
添加其他元素
保存 XML 文档
保存为 Word XML
执行架构验证
设置模板
保护文档
打开保存的 XML 文档
向架构库中添加 XSL 转换
小结
简介
Microsoft® Office Word 2003 包括几个新增的、与 XML 相关的功能以及对现有功能的改进。例如,Word 现在支持称为 Word XML 的XML 文件格式,Word XML 支持 round-tripping(往返)功能。往返意味着由 Word 导出的 XML 也可以由 Word 导入并且可以被 Word 理解。Microsoft Office 2003 支持新的 Word XML 文件格式,它可以由 XML 工具轻松读取、转换和操作。如果要将架构附加到文档,然后将元素从架构分配到文档的各个部分,则 Word 2003 也可以使上述操作变得容易。有关 Word 2003 的这些和其他新增和更新功能的详细信息,请参阅文章 Microsoft Office Word 2003 Beta 2 Preview (Part 1 of 2) 和 Microsoft Office Word 2003 Beta 2 Preview (Part 2 of 2)。
Word Visual Basic® for Applications (VBA) 对象模型中也添加了许多新属性、方法和对象,成为新增 XML 功能的一部分,以有助于使 Word 成为 XML 创作平台的优先选择。对象模型派生自现有的广泛接受的标准:文档对象模型 (DOM),由 Microsoft XML Core Services (MSXML) Version 5.0 实现,因此现在的 DOM 程序员会发现 Word 环境非常熟悉并且设计专业。
在本文中,我们将着眼于在 Word 2003 中使用 XML。我们将通过使用菜单、任务窗格和用户界面的其他部分来研究与 XML 相关的任务,从而实现上述目的。我们还将关注以编程方式执行多数这种相同的任务。我们将使用纯备忘录模板、XML 文件和 XML 架构文档 (XSD) 文件,所有这些都可以从本文中下载。
注 您可以在本文中快速浏览和查找 VBA 示例,这些部分的前面都具有以下计算机图形:
示例纯备忘录模板
要演示在 Word 中使用 XML,请在 Word 2003 中打开文件 Plain Memo.doc(参见图 1)。这是一个纯备忘录模板。
图 1. 纯备忘录文档
正如您所见,该文档被格式化为典型的业务通讯录。我们的任务是将 XML 元素添加到备忘录以创建一个模型。这样,从 XML 文件导入数据时,备忘录字段将会完全按照您所指定的方式进行填充。要将 XML 添加到该模板,您需要安装并附加 XML 架构。
附加架构
将架构附加到文档将允许您使用架构的元素来标记文档。
要使用用户界面附加架构,请执行下列操作:
在 Tools 菜单上,单击 Templates and Add-Ins。
单击 XML Schema 选项卡(参见图 2)。
图 2 . XML Schema 选项卡
单击 Add Schema。
浏览到 memo.xsd 文件所在的文件夹,单击该文件,然后单击 Open。
在 Schema Settings 对话框中,可以为架构输入一个别名。键入 Memo Example,然后单击 OK。
图 3. Schema Settings 对话框
安装新的架构后,它会出现在 Available XML schemas 下的框中。选择复选框将该架构附加到当前文档,然后单击 OPEN。
现在,应该返回到示例备忘录和XML Structure 窗格可见的文档窗口(请参见图 4)。
注 在 Word 中安装架构时,Word 将会使用架构的命名空间来引用架构。如果您还指定了别名,Word 将会使用其别名引用架构。因为大多数命名空间都很长而且复杂,所以别名非常有用。
以下语句用于借助编程方式安装 Memo.xsd 架构,并将其别名定为“Memo Example”:
ActiveDocument.XMLSchemaReferences.Add _ "urn:schemas-microsoft-com.office.demos.memo", _ " Memo Example ", "C:\Word11XML\Memo.xsd"
显示 XML 结构窗格
现在将架构附加到文档后,就可以使用它来标记带有 XML 的备忘录。第一步就是要显示 XML Structure 窗格(如果它尚未显示)。可以通过选择 View 菜单上的 Task Pane 来完成上述操作。然后在任务窗格的顶部,也就是标题的位置,单击下拉列表,再单击 XML Structure。
要以编程方式显示 XML Structure 窗格,请使用以下代码:
Application.TaskPanes(Index:=wdTaskPaneXMLStructure).Visible = True
将元素添加到文档
现在,选择整个文档 (CTRL+A),然后单击位于 XML Structure 窗格底部的框中的<memo>元素。
注 Word 可能会询问是否希望将该元素应用到整个文档。单击 Apply to Entire Document。
要以编程方式将根元素<memo>应用于文档,请使用以下代码:
ActiveDocument.XMLNodes.Add Name:="memo", Namespace:="urn:schemas-microsoft-com.office.demos.memo"
XML 结构窗格
现在,您的文档中已经具有了 XML。在文档中使用其他 XML 时,XML Structure 窗格将会非常有用。
图 4. XML Structure 窗格
让我们快速浏览一下窗格的不同组成部分:
Elements in the document:位于窗格顶端的框,可以从中看到已经应用到文档的 XML 树视图。如果单击树中的某个元素,Word 将会选择文档中的相应元素。还可以使用该树视图来操作元素本身。如果右键单击某个元素,您将会看到:
有关该元素的所有架构验证错误的说明(如果存在)。在我们的备忘录示例中,<memo>元素包含一个错误,因为它预计在其内部有更多元素。稍后,我们将修复这个错误。
Remove tag。可以使用该选项从文档中移除标记。
Attributes。使用该选项在可以向元素添加或删除属性的位置处显示对话框。
图 5. memo 标记的上下文菜单
显示文档中的 XML 标记。该复选框直接位于文档树视图的“元素”下。它指定是否应该将 XML 标记直接显示在文档中。关闭该选项,XML 标记将仍然存在于文档中,它们只是处于隐藏状态。
选择要应用到当前选择的元素。这是包含您当前选择的元素的所有可能子元素的列表。这些元素按照它们出现在架构文件中的顺序列出。还有两个小按钮(向上箭头和向下箭头),可以使用它们来调整该列表框的大小。
仅列出当前元素的子元素。该选项控制上述列表框中显示的内容。如果该元素未选中,则会显示所有元素,而只不是当前选择的子元素。
XML Options。该选项将会打开“XML 选项”对话框。
在熟悉了 XML 结构窗格后,我们继续深入学习。
添加其他元素
备忘录的标题数据(收件人、发件人、主题等)包含在文档的表格中。可以手动将标记添加到表格的单元格中,也可以借助编程方式来实现。要手动添加标记,请执行以下步骤:
在文档的“收件人:”字段中选择名称(John Doe),然后单击位于 XML 结构窗格底部的列表框中的<to>元素。<to>元素会应用到该名称。
要继续手动添加标记,请在“发件人:”字段中选择(Jane Doe),然后单击位于 XML Structure 窗格的底部的框中的<from>元素。
选择备忘录的主题 (My memo to all),然后单击位于 XML Structure 窗格底部的框中的<subject>元素。
还可以通过右键单击应用元素。选择位于优先级行中的“优先级(高)”。右键单击该选择,指向 Apply XML element,然后单击<priority>元素。
选择日期 (1/15/2003)。右键单击该选择,指向 Apply XML element,然后单击<date>元素。
选择备忘录正文中的文本。右键单击,指向 Apply XML element,然后单击<body>元素。
要以编程方式将个别标记添加到文档,请使用以下代码:
ActiveDocument.Tables(1).Columns(2).Cells(1).Select Selection.XMLNodes.Add Name:="to", Namespace:="urn:schemas-microsoft-com.office.demos.memo"
还可以从 Array 中添加 XML 标记。假设名称为 arLtrHeading 的数组中包含每个元素的名称,您可以使用以下代码将每个元素添加到文档中的适当单元格中:
For i = 1 To UBound(arLtrHeading) + 1 ActiveDocument.Tables(1).Columns(2).Cells(i).Select Selection.XMLNodes.Add Name:=arLtrHeading(x), Namespace:="urn:schemas-microsoft-com.office.demos.memo" x = x + 1 Next i
要以编程方式将<body>标记添加到文档中,请使用以下代码:
Set rngMainText = ActiveDocument.Range(Start:=ActiveDocument.Paragraphs(18).Range. _ Start, End:=ActiveDocument.Paragraphs(18).Range.End) rngMainText.XMLNodes.Add Name:="body", Namespace:="urn:schemas-microsoft-com.office.demos.memo"
现在备忘录就使用 XML 进行了标记。
图 6. 带有 XML 标记的纯备忘录
保存 XML 文档
有多个选项可用于保存该文件。如果希望将它作为模板,可以将其保存为 Microsoft Word 模板文件 (*.dot),它将会保留已经应用的 XML 结构,并可以作为模板用于其他文档。还可以将其保存为 Microsoft Word 文档 (*.doc),它也会保留 XML 结构。Microsoft Office Word 2003 中的一项新增选项就是仅保存文件中的数据:
要保存 XML 备忘录,请打开 Save As 对话框。
将 Save as type 更改为 XML Document。
选择 Save Data Only 复选框。
键入文件名(或保留默认值),然后保存该文件。Word 将会提示您确认是否要将文档仅保存为 XML。
单击 Continue 仅保存新的 XML 数据。
要以编程方式仅保存 XML 数据,请使用以下代码:
ActiveDocument.SaveAs "Plain Memo2", XMLSaveMode:=wdXMLSaveMode = wdXMLSaveUserDataOnly
现在,所创建的文件仅包含插入到文件中的 XML 元素以及该文件的文本内容。使用 Microsoft Internet Explorer 打开保存的 XML 文件并查看结果。
图 7. Internet Explorer 中不带 Word 格式的纯备忘录
该文件不包含 Word 信息,如果您要在 Word 中再次打开它,所有布局和格式都会丢失。(如果具有 XSL 转换的话,情况就并非如此,稍后本文将对其进行说明。)
保存为 Word XML
另一个可用选项是利用 Microsoft Word XML 文档架构保存 XML 文件。执行该操作时,来自 Word 的 XML 将全部位于 Word 的命名空间中,而您添加的 XML 将位于其自己的命名空间中。这使得非常便于使用您所标记的 XML,而且仍然保留源自 Word 的布局和结构。
要利用 Word XML 文档架构保存 XML 备忘录,请打开 Save As 对话框。
将 Save as type 更改为 XML Document。
确保没有选中 Save Data Only 复选框。
键入新的文件名,然后单击 Save 保存该文件。
使用 Internet Explorer 打开保存的 XML 文件并查看结果。您会看到该文档中的所有 Word 信息,而且如果向下滚动到<w:body>标记,还将从备忘录架构中看到 XML。
图 8. Internet Explorer 中带有 Word 格式的纯备忘录
要以编程方式将文档保存为 Word XML,请使用以下代码:
ActiveDocument.SaveAs "Plain Memo2", XMLSaveMode:=wdFormatXML
执行架构验证
本部分将说明一些有关如何使用 Word 的内置架构验证的知识。在完成上述步骤后,按照架构,您的文档应该是有效的。由于 XML Structure 窗格中不会出现红色的图标,您可以知道文档是有效的。如果存在架构验证错误,它将会出现在 XML Structure 窗格的树视图中。
让我们使该文档无效,以查看无效文档的样子。备忘录架构在文档上设置了一些限制。 元素只允许三个可能的值:“Low”、“Medium”和“High”。
通过单击 XML Structure 窗格的树视图中的<priority>元素,选择<priority>元素(“High”)的内容。单击树视图中的<priority>元素时,应该在文档中选择“High”。
删除当前选择,然后键入“Urgent”。现在,“Urgent”应该是<priority>标记的内容。
图 9. 纯备忘录中的架构验证错误
请注意,在 XML Structure 窗格中的树视图中,现在<priority>的左侧会出现红色的图标。将鼠标悬停在图标上,将会看到如下警告:This must be one of the following:Low Medium High.该错误直接来自于架构文件。
选择<priority>标记的内容,然后将其更改为“Low”(该值区分大小写)。该错误现在应该不复存在了。
可以使用以下代码以编程方式按照架构验证文档:
ActiveDocument.XMLSchemaReferences.Validate
设置模板
需要完成几件其他事情,以便于该模板更易于人们使用。本部分将说明如何只允许在特定的 XML 标记中进行编辑,还有如何创建占位符文本。
大多数使用模板的人们可能不太熟悉 XML;而且对一些人来说,标记可能会令他们望而却步。这就是当人们填写该文档时,要关闭标记视图的原因所在。尽管这样做可能会产生一些问题:
如果删除了一个标记的内容,情况会如何呢?用户将怎样知道在何处输入?这个问题可以使用占位符文本解决。我们将会在下面对此进行说明。
如果关闭标记,如何确保人们不会意外地删除它们?这个问题可以使用新增的文档保护功能解决。我们也将会在下面对此进行说明。
在下列步骤中,我们将定义当不显示数据时,要在文档中使用的占位符文本。
首先,单击 XML Structure 窗格底部的 XML Options 链接。
在 XML Options 对话框中,找到标签为 Show placeholder text for all empty elements 的选项。选择该选项。
要查看占位符文本的工作方式,请删除<to>元素的所有内容,但不要删除<to>元素本身。通过单击文档中的<to>元素来完成这一操作。这时将会选择内容,而不会选择元素本身。现在,只需按 Delete 键即可。
既然<to>元素为空,关闭标记视图则意味着不会在包含该元素的区域中出现任何内容。通过指定占位符,用户可以看到该元素插入点的位置。可以通过清除 XML Structure 窗格中的 Show XML tags in the document 选项,或者只是使用快捷键:CTRL + Shift + X 来关闭标记视图。该快捷键将会使标记视图在开和关之间切换。
请注意,关闭标记视图时,<to>元素仍然会有一个可见字段。可以单击<to>元素的占位符文本,然后开始键入。您键入的内容将会出现在<to>元素内。如果现在删除键入的内容,占位符文本将会再次可见。
图 10. To 元素中的占位符文本
还可以自定义占位符文本中显示的内容。为此,右键单击 XML Structure 窗格的树视图中的<to>元素,然后选择 Attributes。
图 11. Attributes 对话框
现在,您应该在<to>元素的 Attributes 对话框中。在该对话框的底部,有一个可以在其中指定要使用的占位符文本的文本框。填写该文本框,然后单击 OPEN。文档中的占位符文本现在应该会得到更新。
使用以下语句以编程方式设置占位符文本:
ActiveDocument.XMLNodes(1).PlaceholderText
注 使用 Show placeholder text for all empty elements 选项对于使用占位符文本来说并非必要。在元素 Attributes 对话框中为特定元素指定占位符文本后,相应的单个元素将始终使用占位符文本,不管是否使用 Show placeholder text for all empty elements 选项。注 同时还要注意在元素 Attributes 对话框中指定占位符文本只会影响相应的单个元素,并不会涉及到整个文档中具有相同名称的其他元素。
保护文档
在为文档中的元素给定占位符文本后,将其锁定,以便只允许对特定区域进行编辑。在 Tools 菜单上,选择 Protect Document。屏幕将会显示 Protect Document 任务窗格。
图 12. Protect Document 任务窗格
此处您可以锁定文档的格式,还可以锁定文档的编辑。
格式化限制:该选项允许您锁定文档,以便不允许直接格式化,只有指定的样式才可以用于格式化文档。我们将不会在本文中使用这个功能。
编辑限制:此处您可以指定在文档上允许的编辑等级。对于本文,我们将整个文档设置为只读,然后对我们希望进行编辑的特定部分解除锁定。
选中 Allow only this type of editing in the document 复选框,然后从下拉菜单中选择 No changes (Read only)。
选择<to>元素的内容,然后选中 Protect Document 窗格中的 Everyone 复选框。现在就授予了所有人编辑<to>元素的内容的权限。
现在,让我们开始强制保护。单击 Protect Document 窗格底部的 Yes, Start Enforcing Protection。
您会被询问是否希望输入密码。这是一个可选项,因此按 <>OPEN。
图 13. Start enforcing protection 对话框
现在应该可以看到<to>元素内容的背景变为黄色。这是当前唯一可以编辑的区域。您将无法删除任何 XML 标记,也无法编辑任何其他内容。这是确保人们在填写模板时不会意外删除已应用的结构的有效方法。
图 14. <to> 元素受到保护的文档
打开保存的 XML 文档
现在,您可以分析已保存的 XML 文件。
启动 Word。
单击 File 菜单上的 Open,然后浏览到保存在 Saving the XML Document 部分中的只有数据的 XML 文件的位置。
在 Word 中打开 XML 文件。您将会注意到原来应用到文件的格式现在已经不复存在了。文件在默认的“只有数据”视图中打开。当 Word 打开尚未包含 XSL 转换的任意 XML 文件,Word 都将会使用该视图。
图 15.“ 只有数据 ” 视图中以 Word 方式显示的 XML 文件
让我们选择另一个视图。在 XML Document 窗格中,单击 Browse,然后浏览到保存示例文件的位置(可能是:“C:\Program Files\Microsoft Office Beta Documentation\Microsoft Word XML Content Development Kit Beta 2\Sample”)。选择三种转换(elegant.xsl、professional.xsl 或 contemporary.xsl)中的任意一种。
您可以看到 Word 现在通过转换打开 XML 文件,并且该文件以一种更好的方式显示。让我们选择另一个视图。
单击 XML Document 窗格中的 Browse 选项,在 XSL Transformation 对话框中,浏览到位于保存示例文件的位置的其中一个 XSL 转换文件。
选择尚未使用的三种转换(elegant.xsl、professional.xsl 或 contemporary.xsl)之一。您可以看到 Word 现在通过转换打开 XML 文件,并且该文件以一种更好的方式显示。
图 16. 以 contemporary.xsl 格式化的备忘录
现在,让我们使用架构库来通知 Word 在打开该类型(备忘录)的文件时始终使用该转换。
向架构库中添加 XSL 转换
Word 允许您将不同的资源与命名空间相关联。命名空间是 XML 文件可以标识其类型的方法。Word 将会查看它打开的任意 XML 文件的根命名空间,然后查看架构库以确定可用的 XSL 转换类型,以及 XML 架构文件的位置,以便它可以验证该文档。
要将 XSL 转换添加到架构库中,请执行下列操作:
在 Tools 菜单上,单击 Templates and Add-Ins,然后单击 XML Schema 选项卡。
在 XML Schema 选项卡上,单击 Schema Library。
单击 Memo Example。请注意,如果在首次添加架构的时候,没有为架构给定一个别名,它将会按照其命名空间而不是别名列出。
图 17. Schema Library 对话框
确保已在 Use solution with 下拉框中选择了 Word。这会指定您要为 Microsoft Word 指定的解决方案。
单击 Add Solution 添加解决方案,在此例中为备忘录示例的转换。
浏览到保存示例文件的位置,选择三种 XSL 文件(elegant.xsl、professional.xsl 或 contemporary.xsl)中的任意一种,然后单击 Open。
图 18. Solution Settings 对话框
在 Solution Settings 对话框中,在 Alias 框中为转换输入一个名称。
单击 <>OPEN。该解决方案会被添加到 XML Schema 选项卡上的 Select a schema 列表框中。
图 19. 添加到架构库中的解决方案
对于位于相同文件夹中的其他两种转换,重复这些步骤。
还可以指定希望默认情况下使用的 XSL 转换。从 Default solution 下拉框中选择转换可以实现上述目的。
要以编程方式实现,请使用以下代码:
Application.XMLNamespaces.Add Path:="C:\temp\sales_order.xsd", _ Alias:="Sales", InstallForAllUsers:=True
这样,任何时间在 Word 中打开备忘录命名空间中的 XML 文件时,都会有三种有效的转换形式可以使用。让我们尝试再次打开文档。
单击 Word 中的 Open,然后浏览到保存的只有数据的 XML 文件位置。
在 Word 中打开 XML 文件。
图 20. 利用 Elegant XSL 文件转换的纯备忘录
在屏幕的右侧, XML Document 任务窗格显示可用的不同转换。
单击不同的转换,然后查看 Word 如何自动重新格式化文档。
注 上面所说明的设置 XSL 转换的过程适用于直接使用 XML 文件的人员以及熟悉 XML 的人员。有一种非常简单的方法可以自动配置用户的架构库,而不要求他们使用架构库对话框。要找到有关此问题的详细信息,请阅读《Smart Document Software Development Kit》中的说明章节。
小结
在本文中,我们讲述了几种在 Word 2003 中新增和改进的基于 XML 的功能。我们看到这些功能集成在新增的任务窗格、菜单选项和对象模型的添加中。我们从用户界面和编程角度分析了这些功能。在演练本文中的示例并根据自己的情况深入研究后,显而易见,Word 应当会成为常规文本和 XML 的优先选择的创作平台。