`
xinklabi
  • 浏览: 1586968 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

Microsoft Office Word 2003 中的 XML

 
阅读更多

Microsoft Office Word 2003 中的 XML

发布日期: 11/26/2004 | 更新日期: 11/26/2004

Aaron Skonnard

几年以前,我开始着手一个新书项目时,就决定用 XML 来编写整个项目。我认为用 XML 完成该书可让我在其他地方重复使用内容、将内容转换为其他输出格式,并且可以方便地利用众多 XML 技术(包括 XPath、XSLT、各种 XML API、甚至是 XQuery)。

当我开始调查如何完成该项目的时候,我打开了 Microsoft® Office Word 2000,并开始进行试验。我不断寻找既可以使用 Word 的多信息编辑和格式功能来创作章节,又可以定义 Word 文档和 XML 结构之间的映射的方法。这可让我在熟悉的 Word 环境中工作来生成 XML 内容。当我试验“Save as HTML”功能时(当时使 Word 生成标记文档只有这种技术可以使用),显然还需要“Save as XML”选项。因此,我返回去使用出色的旧版 Emacs 来手工编写 XML。在完成数以千计的尖括号之后,我发誓再也不这么做了。

尽管用 XML 编写整本书非常有价值,但过程实在太痛苦了。幸好,现在可以使用 Microsoft Office Word 2003 了。

Word 2003 中的 XML 支持

Word 2003 中新增的 XML 支持是其最令人兴奋和最强大的功能之一。XML 不再是事后想到的内容;Word 已经针对 XML 进行了完整设计。它支持称为 Word 标记语言 (WordML) 的原生 XML 词汇。有关 WordML 的详细信息,可以从 Microsoft Office Word 2003 Preview 找到。

Microsoft Office Word 2003 引入了生成 WordML 文档的“Save as XML”命令。从这以后,当您双击一个由 Word 生成的 XML 文档时,Windows 加载程序会自动将该文件与 Word 进行关联。WordML 非常强大和灵活,足以捕获整个往返过程中 Word 文档的所有多信息编辑和格式。如果在 Word 中创建一个普通文档,将其保存为 WordML,然后再从 Word 中打开它,该文档保证与原始文档一样。

下面是 WorldML 文档的基本结构:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument 
    xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" ...
>
   <!-- WordML structure goes here -->
</w:wordDocument>

请注意,这就是一个 XML 文档。根元素的名称 wordDocument 来自 http://schemas.microsoft.com/office/word/2003/WordML 命名空间(在本专栏中,我将使用前缀“w”来引用这个命名空间)。当您从 Windows 资源管理器中双击该文件时,Windows® 会自动确定它是 WordML 文档(通过检查顶部的 mso-application 处理说明),然后启动 Word 来处理它。

WordML 的引入可能是 Microsoft Office Word 2003 中最为重要的更改,但绝不是唯一的更改。开发人员还可以将自定义的 XML 架构定义和 XSLT 转换附加到 Word 文档。开发人员可以利用附加架构中的元素来标记内容,这样就可以插入用于简化处理过程的有意义的业务特定标记。当您在 Word 中保存文档时,它可以根据附加的架构来验证文档,并可以在处理过程中应用自定义的 XSLT 转换。本专栏的其余部分将更详细地分析这些吸引人的新功能。

WordML 简介

WordML 架构旨在镜像传统 .doc 文件中的信息。WordML 的架构是 Microsoft Word XML 内容开发工具包 (CDK) Beta 2 的组成部分,您可以从 MSDN 的 Microsoft Office 2003 Downloads 进行下载。WordML 文档的根元素始终为 w:wordDocument。w:wordDocument 包含表示完整 Word 文档结构(包括属性、字体、列表、样式以及包含章节和段落的实际文档正文)的几个其他元素,如图 1 所示。

图 2 显示了具有普通格式的 Word 文档,包括指定样式(例如 Heading 1)、内嵌样式(粗体和斜体)和简单的正文。

fig02

图 2 WordML 格式的文档

 

图 2 中所示的文档的 o:DocumentProperties 元素包含可用于所有 Office 文档的文档属性,例如标题、作者、上次修改者、创建日期、上次保存日期等等(请参见图 3)。o:DocumentProperties 元素来自不同于 WordML 的命名空间,因为它会应用到所有 Office 文档,并且将跨其他 Office XML 词汇(例如 ExcelML)进行共享。

w:fonts 和 w:styles 元素包含文档中使用的字体和样式信息。文档中使用的每种字体或样式都将使用其中一个元素中的 XML 元素来表示。图 4 展示了您在图 2 中所见的文档的字体和样式信息。

w:docPr 元素包含给定文档的 Word 特定属性,例如视图和缩放设置,如下面的代码片段所示:

<w:docPr>
  <w:view w:val="print"/>
  <w:zoom w:percent="100"/>
  <w:doNotEmbedSystemFonts/>
  <w:proofState w:spelling="clean" w:grammar="clean"/>
  <w:attachedTemplate w:val=""/>
  <w:defaultTabStop w:val="720"/>
  <w:characterSpacingControl w:val="DontCompress"/>
  ...
</w:docPr>

最后,w:body 是文档内容所在的位置。w:body 元素包含章节,而章节包含段落和表格。段落和表格是分别使用 w:p 和 w:tbl 元素创建的。段落和表格最终由文本运行元素 (w:r) 组成,该元素可以使用其他属性和样式加以批注。图 5 展示了图 2 中所示的文档的 w:body 元素。

正如您看到的那样,原始 Word 文档中的所有格式都会以某种形式在 WordML 文档中表示出来。这样就可以在不丢失任何信息的情况下,在 .doc 文件和 .xml 文件之间移动数据。

使用 WordML

文档使用 WordML 格式的主要好处在于,您可以使用任何编程语言在任何平台上利用 XML API(DOM、SAX、XmlReader 等等)来处理它们。您还可以使用像 XPath 和 XSLT 这样的高级 XML 服务来处理 WordML 文档。例如,使用以下 XPath 表达式,可以很轻松地打开一个 WordML 文档,并标识以 Heading 1 样式标记的所有 w:p 元素:

//w:p[w:pPr/w:pStyle/@w:val = 'Heading 1']

您还可以编写 XSLT 转换,以便在 WordML 和其他基于文本的格式之间转换。 例如,图 6 中所示的 XSLT 展示了一种将 WordML 转换为简单 HTML 结构的方法。 对图 2 中所示的 WordML 文档运行该转换会生成图 7 中所示的 HTML 文档。 WordMLHTML(另一个转换可以从 WordML to HTML XSL Transformation 中获得。)?

fig07

图 7 文档转换到 HTML

 

除了更方便地处理 Word 文档外,WordML 还可以更加方便地生成 Word 文档。因为它们就是 XML,您可以使用任何用于生成 XML 的标准技术来生成 Word 文档。例如,您可以轻松地即时编写可生成 WordML 文档的 ASP.NET 页面,图 8 中阐释了这种技术。

fig09

图 9 ASP.NET 页

 

该 ASP.NET 页会生成相同的文档,只是现在标题包含“Hello [name]”,其中 [name] 将替换为在查询字符串中提供的值。使用查询字符串“?name=Aaron”浏览到该 ASP.NET 页,会生成图 9 中所示的文档。

自定义架构

除了 WordML 以外,Microsoft Office Word 2003 还包括对自定义 XML 架构定义 (XSD) 的支持,这使您可以将一个或多个自定义架构附加到给定的 Word 文档中。然后,您可以用附加架构中的元素对文档进行批注。这样,您可以将与业务相关的标记插入到文档中,以便可以根据业务标识符(而不是更通用的 WordML 标记)来处理文档。

例如,请考虑一个包含新员工信息的 XML 文档。您可以使用图 10 中所示的员工架构中的元素来批注该文档。要完成该操作,您必须首先将架构附加到 Word 中的 XML 文档。

通过从菜单中选择“Tools | Template and Add-Ins”,您可以将 XML 架构定义附加到一个 Word 文档。出现的对话框将包含一个“XML 架构”选项卡,您可以在其中管理架构库,并选择要附加到该特定文档的架构(请参见图 11)。您还可以指出 Word 是否应该验证文档,以及它是否应该允许用户保存无效的文档。

fig11

图 11 管理架构

 

在添加架构后,就可以开始利用该架构中的元素批注文档。Word 中的“XML 结构”窗格(显示在右侧)可让您将附加架构中的自定义元素插入到文档中。“XML 结构”窗格还为您提供了一个针对当前整个文档中存在的自定义元素的界面,方法是在该窗格内显示这些元素的逻辑树结构。

图 12 显示了“XML 结构”窗格,以及如何选择一个自定义元素以插入到文档中。在此例中,我从 urn:employees 命名空间中选择了 Employee 元素来插入到文档中。当我双击某个自定义元素时,Word 会将当前突出显示的文本包括在该元素中。在第一次插入自定义元素时,Word 会询问您是否要包围整个文档,这通常是您想要执行的操作。

fig12

图 12 将自定义元素插入到文档中

 

在您完成该操作后,Word 将在文档中显示 XML 标记,以便您可以看到它们出现的位置。图 12 展示了在插入 Employee 元素包围整个文档后该文档的样子。如果您不想看到可见的 XML 标记,可以通过取消选中“Show XML tags in the document”复选框来隐藏它们。

fig13

图 13 嵌入式元素的树结构

 

在将其他元素插入到文档时,Word 会在“XML 结构”窗格的顶部显示自定义元素的逻辑树结构。该视图只显示嵌入式自定义元素,这样在其中选择文本会非常方便(如图 13 中的 Last 元素所示)。

架构验证

在插入自定义元素后,Word 将开始验证文档内容(假设您在附加架构时选择了该选项)。在文档左下方出现的紫色线(如图 12 所示)表示 Employee 元素的内容在当前是无效的(因为它在此例中缺少一些必需的子元素)。“XML 结构”窗格中 Employee 元素旁边的黄色图标表示相同的情况。右键单击这两项中的任一项就会显示该问题。

当您将光标放在 Employee 元素内时,Word 会根据该架构自动确定 Employee 下允许的子元素,并在“XML 结构”窗格的底部显示它们。在此例中,Word 显示了 ID、Name 和 Phone 元素,这样可以非常轻松地选择一些文本并快速地应用它们(请参见图 12)。

Word 还会根据架构中提供的简单类型定义来验证文本内容。例如,图 10 中的架构包含两个简单类型:一个称为 SSN,另一个称为 Phone。这两个简单类型都使用模式面(正则表达式)来限制字符串。图 14 展示了操作中的简单类型验证。请注意,如果它没有位于简单类型的值空间中,那么紫色线会出现在文本下方。在这种情况下,如果您右键单击它,Word 会指出该文本没有遵循必需的模式 (\d{3}-\d{2}-\d{4})。在您键入时,会即时发生这些情况。

fig14

图 14 类型验证

 

在您添加所有必需的元素并使文本符合正在使用的简单类型定义后,该文档应该如图 13 所示。在所有紫色线都消失后,您就知道该文档是有效的了。默认情况下,Word 不会让您将存在验证问题的文档保存为 XML。但是,选择“Allow saving as XML even if not valid”选项(请参见图 11)可以在文档尚未完全有效的情况下保存文档。当您保存带有自定义元素的文档时,您必须决定是否要在输出中包含 WordML 标记。

保存文档

在保存带有自定义元素的 Word 文档时,您有两个选项。默认选项是将文档保存为带有嵌入到树中的自定义元素的 WordML。另一个选项是“Save data only”,它将删除 WordML 标记,并且只保留自定义元素的树结构。

例如,图 15 展示了 Employee 和 ID 元素在图 13 所示文档的 WordML 中出现的位置。需要注意的一件事情是,根据该架构,Employee 元素不会正式允许包含除 ID、Name 和 Phone 之外的子元素,因此 w:p 子元素会使该文档无效。您可能会问,既然在保存前已经没有任何紫色指示符了,那么 Word 如何将文档视为有效呢?这表明,在忽略 WordML 标记存在的情况下(因为您可以选择排除它),Word 具有足够的智能来确定有效性。

fig16

图 16 仅保存为数据

 

当您选择“Save data only”(请参见图 16)时,Word 会删除 WordML 标记,并只保存文档中的自定义元素。但是,这样做会导致您丢失可能已经应用到文档中的所有特殊格式。图 17 显示了在以这种方式保存时 employee 文档的样子。请注意,完全符合附加架构的 XML 文档就更加简单和清晰了。

fig17

图 17 没有格式的文档

 

应用转换

在保存文档时,您可能希望同时生成完全不同的格式(可能甚至不是 XML)。 为了满足这个要求,Word 可以在保存过程中应用 XSLT 转换。 通过选择“Save As”对话框中的“Apply transform”选项,您可以指定一个转换(请参见图 16)。 简单地从磁盘中选择一个 XSLT,Word 将运行该转换,并在您每次保存该文档时输出结果。

您可以通过架构库将多个转换与给定的架构相关联,从而创建所谓的 Word 解决方案。 这样,对于所有实现给定架构的文档来说,这些转换都可用。 如果您可以将多个 XSLT 转换用于某个给定文档,则 Word 将在“XML 文档”窗格(位于右侧)中启用它们,这可让您在 Word 中同一文档的多个视图之间轻松地切换。

Word 还支持在打开文档的同时使用转换。 Word 在“Open”对话框中提供了“Open as XML”选项,以便您可以选择想要使用的特定转换。 当您选择该选项时,Word 会打开应用转换的结果,而不是您选择打开的原始文档。

小结

在添加 XML 支持以后,Microsoft Office Word 2003 就大大超越了先前的版本。 对 WordML 的原生支持可以在无需抛开 XML API 优点的同时构建强大而灵活的内容解决方案。 另外,对 XML 架构、实时验证以及各种 XSLT 技术的内置支持,使得利用自定义 XML 架构和输出格式信手拈来。

除了此处描述的核心 XML 功能以外,Microsoft Office Word 2003 还可以完全通过 Visual Basic® for Applications 和 Microsoft Word XML CDK Beta 2 进行编程。Microsoft Office Word 2003 将对使用文档驱动其业务的组织产生巨大影响。 有关完整示例,请查看包含在 CDK (Microsoft Office 2003 Downloads) 中的 DocLibrary (Contoso, LLC) 示例。

请将给 Aaron 的问题和意见发送至 xmlfiles@microsoft.com

Aaron Skonnard 是 Northface University (http://www.northface.edu) 的助教兼 .NET 项目的主管,他正在努力将这所学校建成全球最好的软件开发人员大学。 Essential XML Quick ReferenceEssential XMLAaron 与他人合著了 Essential XML Quick Reference(Addison-Wesley,2001 年)和 Essential XML(Addison-Wesley,2000 年)。您可以通过http://www.skonnard.com与 Aaron 取得联系。

分享到:
评论

相关推荐

    Microsoft Office 2003 Web Component(OWC)

    Microsoft Office 2003 Web Components(OWC)是一组基于COM(Component Object Model)的控件,主要用于在Web应用程序中嵌入和操作Microsoft Office的数据和功能。OWC11.exe是这些组件的安装程序,它包含了Excel、...

    Microsoft Office 2003 Edition XML Schema References

    https://www.microsoft.com/en-us/download/details.aspx?id=101 在使用XML生成Excel时候用来参考XML的属性。

    microsoft office 2003 sp3 Russian

    在Office 2003中,Word 2003是最为核心的应用之一,主要用于文本处理和文档编辑。Word 2003提供了丰富的格式设置选项,包括字体、字号、颜色、对齐方式等,让用户可以随心所欲地设计出各种风格的文档。此外,它还...

    word2003打开docx文档的插件

    2. **使用在线转换服务**:如果无法安装兼容包,用户还可以选择在线的文件转换服务,将DOCX文件转换为DOC格式,然后再在Word 2003中进行操作。 3. **升级Word版本**:最直接的解决方案是将Word 2003升级到更高版本...

    Microsoft.Office.Interop.Word.dll下载,里面包含各种版本的更新

    在IT行业中,Microsoft Office Interop Word是.NET Framework下用于与Microsoft Word应用程序进行交互的重要组件。它允许开发者通过编程的方式来控制Word,实现自动化文档处理、数据导入导出等功能,极大地提升了...

    word文件批量替换(word转xml、xml转字符串、doc转docx)

    这通常通过编程方式实现,例如使用Microsoft Office的Open XML SDK或者Python的python-docx库。转换后的XML文件可以使用XML解析器读取,然后根据需求对数据进行处理。 接下来,我们要讨论的是“xml转字符串”。XML...

    Microsoft.Office.Interop.Word 11.0和12.0 两个

    Microsoft.Office.Interop.Word 11.0对应的是Office 2003,而12.0则对应Office 2007。两者的主要区别在于新版本引入了大量新功能和改进,如新的XML基础结构、 Ribbon UI( Fluent 用户界面)以及更强大的协作和共享...

    word2003打开docx的补丁.rar

    标签"office"暗示这与整个Microsoft Office套件相关,尽管我们的焦点是Word 2003。补丁通常由微软或其他第三方开发者提供,以增强软件的功能或兼容性。 在压缩包子文件的文件名称列表中,虽然没有具体的文件名,但...

    word to pdf word xml to pdf

    1. **使用Word内置功能**:自Microsoft Office 2007以来,Word就提供了直接保存为PDF的功能。只需打开Word文档,选择“文件”-&gt;“另存为”,然后在下拉菜单中选择PDF格式即可。 2. **使用在线转换工具**:如Small...

    Microsoft Office 2007兼容包

    在Microsoft Office 2007中,微软引入了一系列新的文件格式,这些格式基于XML,具有更好的数据管理和压缩效果。然而,这些新格式在旧版Office中是不被支持的,这给用户带来了困扰。为了解决这个问题,微软发布了这个...

    微软Office Word、Excel、PowerPoint 2007 格式兼容包

    微软Office Word、Excel、PowerPoint 2007 格式兼容包是微软推出的一款重要系统补丁,旨在帮助使用较早版本的Office用户能够打开、编辑和保存使用Word、Excel和PowerPoint 2007及更高版本创建的文件格式。...

    Microsoft.Office.Interop.Word各版本DLL.rar

    在IT行业中,Microsoft Office Interop 是一套用于与Microsoft Office应用程序进行交互的接口,它允许开发者在.NET Framework中使用COM(组件对象模型)自动化技术来控制Word、Excel等Office应用程序。本资源...

    Office+2003组件owc11

    Office 2003组件OWC11是微软在Office 2003版本中引入的一个重要工具,它全称为Office Web Components 11。这个组件集为开发者提供了一种强大的方式,在Web应用程序或者Java应用中集成和操作Microsoft Office文档的...

    xml格式word文档解析器

    它需要理解Word的Open XML标准,这是Microsoft Office用于存储文档的文件格式。 7. **“xml格式word解析器1.md”**:这可能是一个Markdown文件,包含有关解析器的使用指南、示例代码或功能解释。用户应详细阅读此...

    word2003可以打开word2007的插件

    总的来说,为了在Word 2003中打开和编辑由Word 2007创建的.docx文件,用户需要下载并安装Microsoft Office Compatibility Pack,这是一个能够解决文件格式不兼容问题的有效解决方案。通过这个插件,用户可以继续使用...

    office word文档解析

    在IT行业中,处理和解析Microsoft Office的Word文档是一项常见的任务,尤其在数据分析、文本挖掘以及自动化办公流程等领域。本项目专注于“Office Word文档解析”,它提供了对doc和docx两种格式的支持,允许开发者...

    Word文档转xml

    POI是一个Java库,支持处理Microsoft Office格式的文件,包括Word。首先,将POI库集成到Android项目中,然后通过它提供的API读取文档内容。 2. **解析Word内部XML**:打开Word文档的压缩包,提取document.xml等关键...

    office2003兼容office2007插件

    这种插件的出现,主要是因为Office 2007引入了新的文件格式,如.docx, .xlsx, 和.pptx,这些格式在Office 2003中默认是不支持的。 在描述中提到的“在Office2003中打开Office2007的文档”,这意味着用户可能遇到了...

    aspose-word+license.xml

    然而,使用Freemarker生成的Word文档有时可能会遇到兼容性问题,导致在Microsoft Office中无法正常打开或显示不正确。这时,我们可能需要借助第三方库如Aspose.Word来解决这个问题。 `Aspose.Word`是一个强大的API...

    office2003打开2007以上文件插件

    .docx是Microsoft Word 2007及以后版本中默认的文档格式,它采用更高效的XML编码,从而可以提供更好的文档管理和协作功能,但同时也导致了与旧版软件的不兼容。 在压缩包内的文件名称列表中,我们可以推测可能包含...

Global site tag (gtag.js) - Google Analytics