返回
前端
分类

微软官方的解释XML与Word    ,更有必要将文档存储于容量小、稳定可靠且支持各种平台的文件中

日期: 2020-01-25 01:45 浏览次数 : 90

如今,当计算机和文件互相连接时,更有必要将文档存储于容量小、稳定可靠且支持各种平台的文件中。为满足这一需求,2007 Office 版本在 XML 支持的发展方面实现了新的突破。基于 XML 的新文件格式使 Office Word 2007 文件变得更小、更可靠,并能与信息系统和外部数据源深入地集成。

简介

基础:微软官方的解释XML与Word    

缩小文件大小并增强损坏恢复能力

Microsoft Office Word 2007提供了一种新的默认文件格式,叫做Microsoft Office Word XML格式(Word XML格式)。这种格式基于开放打包约定(Open Packaging Conventions),XML Paper Specification (XPS)也是基于这个约定。Microsoft Office 97到Microsoft Office 2003中使用的二进制文件格式仍然可以作为一种保存格式来使用,但是它不是保存新文档时的默认文档。

 

新的 Word XML 格式是经过压缩、分段的文件格式,可大大缩小文件大小,并有助于确保损坏的文件能够轻松恢复。

在1999年发布的,Microsoft通过Microsoft Office Excel 2002中的SpreadsheetML,将XML引入了Microsoft Office XP当中。SpreadsheetML是一个良好的开始,但是它没有提供完全真实的功能。在下一个版本的Microsoft Office产品中,Microsoft Office Word 2003引入了WordprocessingML。WordprocessingML是非常重要的一步,因为它是Microsoft Office提供的第一个完全真实的XML文件格式。通过Microsoft Office 2003,您可以解析WordprocessingML文件,向其中添加、更新或处理数据。但是,仍然存在着一些限制。例如,您必须将二进制文件(例如图 片)编码为XML文件中的文本,如果文件中包含大量图片的话,这必然会增加文件的尺寸。另外,Word 2003直接将所有自定义XML数据嵌入到描述文档的WordprocessingML当中。这样使得自定义XML难于访问和处理所有的外部过程。

关于 Word 中的 XML 文档

适用于: Microsoft Office Word 2003

 注释   除了将文档保存为带 Word XML 架构的 XML,其他的 XML 功能只能在 Microsoft Office Professional Edition 2003 和独立的 Microsoft Office Word 2003中使用。

将文档与业务信息连接

Word 2007中新的文件格式将文件分成一些文档部件,其中每个部件定义了文件的部分内容,这样就解决这些问题。当您希望更改文件当中的一些内容的时候,您可以 简单的查找您希望更改的文档部件,例如页眉,然后无需影响其它基于XML的文档部件,就可以编辑它。类似的,所有的自定义XML数据都有它自己的部件。现 在,处理自定义的XML就更加简单的。这允许您使用很少的代码来生成文档。新的文件格式更加的强大,并且可以更为简单地处理自定义XML,而且它比二进制 文件格式要更小。新的文件格式使用开放打包约定,利用ZIP技术。本篇文章将浏览Word 2007文档中这种新文件格式的结构。

为什么使用 XML?

可扩展标记语言 (XML) (可扩展标记语言 (XML):标准标记语言 (SGML) 的一种浓缩形式,开发人员可用其创建自定义标签,为整理和提供信息提供了灵活性。)) 使您能够以以前不可能或很难实现的方式组织和处理文档和数据。使用自定义 XML 架构,可以从普通商业文档中识别并提取出特定的商业数据片段。

例如,一张包含客户姓名和地址的支票,或者一份包含上季度财务结果的报表都不再是静态文档。它们包含的信息可以被传送到一个数据库或在文档外部的其他地方重用。

将 Microsoft Word 文档以标准 XML 格式保存的能力有助于将内容从文档范畴中分离出来。内容可用于自动化数据采集和用途变更过程。内容能够很容易地被搜索到,甚至被 Word 以外的其他进程所修改,例如基于服务器的数据处理。

因为 Word 能够将其文档表示为 XML,通过将来自各种源的数据放在一起,自动化的基于服务器的进程可以在运行中生成 Word 文档。这样的文档能够很容易地定期更新,排除了相关数据的手动搜索和不必要的重新键入。

在业务中,您需要创建文档来沟通重要的业务数据。您可通过自动完成该沟通过程来节省时间并降低出错风险。使用新的文档控件和数据绑定连接到后端系统,即可创建能自我更新的动态智能文档。

Word 2007 文档包

Word 2007中的文件格式由一个压缩的ZIP包组成,称为包。这个包中包含了文档中的所有内容。通过这种包格式,可以减少Office文档文件的容量,因为它 是使用ZIP压缩的。新的格式也更加的稳定,而避免了传输或处理中可能出现的错误。它允许您使用工业标准的ZIP工具,来处理文档的内容。最为简单的查看 这咱新文件格式的方法是,将一个Word 2007文档保存为这种新的默认格式,然后将这个文件重命名为.zip扩展名。双击文件,打开并查看它的内容。

注意 为了理解基于Microsoft Office Open XML格式(Office XML格式)的组成,您可以将它的所有部件提取出来。要打开这个文件,您需要在您的计算机中安装一个ZIP工具,例如WinZip。您可以通过以下步骤在 Word 2007中打开一个Word XML格式:

1.

创建一个临时目录来存储文件和它的部件。

2.

创建一个Word 2007文档,包括文本,图片,以及其它元素,保存为一个.docx文件。

3.

在文件名的末端添加一个.zip扩展名。

4.

双击文件。这时将会在ZIP应用程序当中打开该文件。您可以查看组成文件的每个部件。

5.

将这些部件提取到刚才创建的临时目录当中。

6.

集成的ZIP压缩可以将文件的尺寸减少百分之75。文件最终被分成一些模块化的文件结构,它使得数据的恢复更为可行,并且增强了安全性。新的格式将文件分成了不同的组件,从而可以独立的管理和修复。以新格式创建的文件也根据不同的文件类型,拥有一些特殊的扩展名。

表 1. Word 2007 文件类型的扩展名

Word 2007 文件类型

扩展名

Word 2007 XML 文档

.docx

Word 2007 XML 启用宏的文档

.docm

Word 2007 XML 模板

.dotx

Word 2007 XML 启用宏的模板

.dotm

Word 和 XML

Microsoft Word 允许您以两种方式处理 XML 文档:

  • 使用 Word XML 架构     可以在 Word 中创建一个文档,然后将其保存为 XML 文档。Word 使用它自己的 XML 架构 (XML 架构:以 XML 编写的正式规范,定义了 XML 文档的结构,包括元素名和丰富的数据类型,以及哪些元素要以组合形式出现,每一元素具有哪些属性。))、WordML 来应用存储信息(例如文件属性)的 XML 标记,并且定义文档的结构(例如段落、标题和表格)。根据 Word XML 架构,Word 还使用 XML 标记存储格式和版式信息。
  • 使用任意 XML 架构     可以在 Word 中创建或打开一个文档,将任意自定义的 XML 架构附加到该文档,并将 XML 标记应用到文档内容。将文档另保存为 XML 文档时,XML 标记会根据附加到该文档的 XML 架构定义文档结构。

保存文档时,Word 架构和自定义架构都被默认附加到文档,保留自定义架构定义的数据和 Word XML 架构定义的丰富格式。根据自定义架构,还可以选择仅保存数据。

无论是用内置的 Word XML 架构定义 Word 文档结构,还是附加自己的架构来定义更适合您业务的结构,任何能够分析 XML 的软件都能阅读并处理您保存为 XML 格式(.xml 文件)的文档中的数据。

例如,如果将自定义架构用于简历数据,文档中的 XML 标记将会按照姓名、地址、工作经历、教育等来定义文档结构。保存该文档时,您同时拥有一个打印时看起来很专业的格式丰富的文档,和一个能够被任意可处理 XML 的程序所处理的数据文件。

还可以将 XML 数据存储在保存为 Word 文档 (.doc) 或模板 (.dot) 的文档中。但是,只有 Word 能够读懂或处理该 XML。

在文档信息面板中管理文档属性

Word XML格式的开放打包约定

必赢备用网址 ,开放打包约定指定了Word 2007文档中新文件格式的结构。有关开放打包约定的更多信息,请查看开放打包约定,XML Paper Specification 也使用这个约定。

为了理解一个Word 2007文档的结构,您必须理解这种新文件格式中的三个主要组件:

1.

部件项。每个部件项都对应于包解压后的一个文件。例如,如果您右击一个Microsoft Office Excel工作簿,然后选择提取它,您将会看到一个workbook.xml文件,一些 sheetn.xml文件,和其它的一些文件。这些文件都是包中的文档部件。

2.

内容类型项。内容类型项描述了一个文档部件存储了什么类型的文件。例如,image/jpeg表示了一个JPEG图片。这种信息允许Microsoft Office,和第三方工具,来决定包中任意部件的内容,并处理它的内容。

3.

关系项。关系项指定文档部件的集合如何组合为一个文档。这种方法指定了一个源部件和一个目标部件之间的连接。关系在文档包中存储为XML部件,例如/_rels/.rels。

下面的章节解释了这些组件如何组成一个Office XML格式的文件。

Word 2007 文档部件

为了便于使用第三方的过程和工具来组建和装配Word 2007文档,Word将包的内容分成许多逻辑部件,每个部件存储了一个特定的文档部分,例如:

1.

注释

2.

格式定义

3.

列表定义

4.

页眉

5.

图表

6.

关系图

7.

文档内容

8.

图片

在包中,Word使用单独的文件来表示文档中的每个部分。这些部件可以由XML文件组成,例如包含标记的Word XML格式的文档部件,以及附加的内容,例如二进制的图片或嵌入的OLE文件。所有的这些都包含在包中。但是,更为重要的是,通过开放打包约定定义的一些 例外,实际的文件目录结构是任意的。

包中文件的关系,而不是文件结构,决定了文件的有效性。您可以重新排布和命名ZIP容器当中的部件,只要保证正确的更新关系,并且保证文档部件之间 正确的关联就可以。如果关系是正确的,那么就可以无误的打开文档。Word 2007文档的初始文件结构只是Word创建的默认结构,它使得您可以轻松的定位文件的组成。只要您正确的保持了关系,那么您可以更改这种文件结构。

例如,在Word 2007中,容器文件代表了一个文档。在容器文件中,按序排布的部件组成了文档。例如,一个Word 2007文件可能会(但不仅限于)包含一步下列目录和文件:

1.

[Content_Types].xml。 描述出现在文件中的每个内容类型。

2.

rels folder。 存储所有指定部件的关系部件。

3.

rels file。 描述了文档结构中的起始关系。它称为关系部件。

4.

datastore folder。 包含了文档中的自定义XML数据部件。自定义XML数据部件是一个XML文件,您可以将节点绑定到文档的内容控件中。

5.

item1.xml file。 包含了一些文档中出现的数据。例如自定义XML数据部件。

6.

docProps folder。 包含了应用程序的属性部件。

7.

App.xml file。 包含了应用程序特定的属性。

8.

Core.xml file。 包含了所有基于开放打包约定文档格式的通用文件属性。

图 1 显示了一个示例Word 2007文档的文件结构。

必赢备用网址 1

图 1. 一个典型Word 2007 文档的层次化文件结构

您可以替换整个文档部件,从而更改Word 2007文档的内容、属性、或格式。

Word 2007 内容类型

上面提到过,每个文档部件都有一个特定的内容类型。一个部件的内容类型描述了这种文件类型的内容。例如,XML部件包含了Word XML格式定义的标记,而内容类型可以帮助您分析它的组成。

典型的内容类型是以word application开头,然后是厂商的名称。在内容类型中,word vender 被简写为vnd。所有内容类型都被指定为以application/vnd.ms-word开头。如果内容类型是一个XML文件,那么它的URI将以+ xml结尾。其它的非XML内容的类型,例如图片,则没有这种结尾。下面是一些典型的内容类型:

1.

application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml

它是一个描述Word文档中的尾注文档部件的内容类型。其中,+xml表示它是一个XML文件。

2.

application/vnd.openxmlformats-package.core-properties+xml

它是一个描述核心文档属性部件的内容类型。其中,+xml表示它是一个XML文件。

3.

image/png

图片的内容类型。其中没有+xml部分 - 表示内容类型不是XML文件。

您可以使用所有的这些内容类型,来处理一个Word 2007文件的内容。Microsoft Windows Software Development Kit (SDK) for Beta 2 of Windows Vista and WinFX Runtime Components包 含了System.IO.Packaging命名空间,它允许您添加文档部件、获取和更新内容,或者创建关系。例如,使用Microsoft WinFX System.IO.Packaging类,您可以使用PackagePart.CreatePart方法创建一个文档部件。CreatePart方法需 要两个字符串参数;一个是新部件的URI,另一个是部件的内容类型,如下所示:

PackagePart packageNewPart = package.CreatePart(uriResourceTarget, "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml");

这个代码示例使用存储在uriResourceTarget变量中的URI和表示格式的内容类型,创建了一个文档部件。有关PackageParts的更多信息,请查看Microsoft Windows SDK中的 PackagePart Class引用文档。

定位内容类型

下面的章节包含了一个内容类型中出现最为频繁的列表。Word 2007在包中通过一个文件或部件描述每个内容类型。在包根目录下的[Content_Types].xml文件,列出了文档中的每个部件,以及它的 ContentType对象。例如,您可能会看到如下的内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">

<Override PartName="/word/footnotes.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml"/>

<Default Extension="png" ContentType="image/png"/>

<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>

<Default Extension="xml" ContentType="application/xml"/>

<Override PartName="/word/document.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/>

<Override PartName="/word/numbering.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml"/>

<Override PartName="/word/styles.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/>

<Override PartName="/word/endnotes.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml"/>

<Override PartName="/docProps/app.xml" ContentType= "application/vnd.openxmlformats-officedocument.extended-properties+xml"/>

<Override PartName="/word/settings.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"/>

<Override PartName="/word/footer2.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"/>

<Override PartName="/docProps/custom.xml" ContentType= "application/vnd.openxmlformats-officedocument.custom-properties+xml"/>

<Override PartName="/word/footer1.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"/>

<Override PartName="/word/theme/theme1.xml" ContentType= "application/vnd.openxmlformats-officedocument.theme+xml"/>

<Override PartName= "/word/fontTable.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"/>

<Override PartName= "/word/webSettings.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml"/>

<Override PartName="/word/header1.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml"/>

<Override PartName="/docProps/core.xml" ContentType= "application/vnd.openxmlformats-package.core-properties+xml"/>

</Types>

您可以在目录结构中重命名或重新排布所有这些部件。列出的这些部件都在它们默认的位置,并且拥有默认的名称,从而可以轻松的判断出它们是什么文件。

在包根目录下的Word目录中,包含了描述文档的最为主要的信息。在这个目录中,您可能会发现一些表示可用内容类型的部件。

将文档部件匹配到内容类型

文件格式中每个XML文件都是一个文档部件。如果您详细的查看这种新格式的文件,您会发现一些目录结构,或文档部件,例如 /word/fontTable.xml和word/styles.xml。这些文件的名称清楚的表示了它们的目的(例如,字体表和格式部件)。但是,您 也可以更改它们的名称。因为在[ContentTypes].xml文件中的<Types>元素匹配了每种内容部件,它们表示不同的内容类 型。[ContentTypes].xml可能由下列代码组成:

<Override PartName="/word/styles.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/><Override PartName= "/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>

其中,/word/styles.xml文档部件拥有/vnd.openxmlformats-package.core-properties+ xml内容类型。/docProps/core.xml部件拥有application/vnd.openxmlformats- package.core-properties+xml内容类型。

文档部件间的关系

关系是包中更为重要的部件之一,因为它们记录了文档部件之间的连接。您可以在包的目录结构中重命名或移动部件,但是必须通过关系正确的保持文件的有效性。

关系表示了文件包中两个部件的逻辑连接。例如,根文档部件拥有一个http: //schemas.openxmlformats.org/package/2006/relationships/header类型到 application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml 内容类型部件的关系。这表示部件之间的关系是,目标部件是源部件的页眉。另外,该内容部件表示这是内容是一个Word 2007页眉。这个页眉部件可能也会拥有它自己的关系。例如,如果页眉中包含一个JPEG图片,那么页眉可能会一个从http: //schemas.openxmlformats.org/officeDocument/2006/relationships/image到 image/jpeg内容类型的关系。

在包中,关系通过可以在一个叫做_rels的目录中进行定位。为了查找从任意部件生成的关系,请查找_rels目录。如果这个部件拥有一些关系,那 么_rels目录中将会包含一个文件,它是您的源部件的名称加.rels扩展名。例如,假设您希望查找officeDocument部件是否拥有关系,其 中可能会拥有一个http: //schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument 内容类型。默认地,这个部件会拥有一个/word/document.xml的URI,因为您可以打开包中的/word/_rels目录,所有查找一个叫 做document.xml.rels的文件。

每个关系都拥有一个源和一个目标。源是关系命名的部件。例如,document.xml.rels中所有的关系都将document.xml作为它 们的源。每个.rels文件都包含一个<relationships>元素,其中您可以为每个目标关系找到一个对应的< relationship>元素,其中包含目标关系的id,这就是目标部件,并且会包含目标部件的内容类型。下面是 document.xml.rels文件中一个典型的<relationships>元素:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">

<Relationship Id="rId3" Type= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target= "docProps/app.xml"/>

<Relationship Id="rId2" Type= "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target= "docProps/core.xml"/>

<Relationship Id="rId1" Type= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target= "word/document.xml"/>

<Relationship Id="rId4" Type= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties" Target= "docProps/custom.xml"/>

</Relationships> 

注意,每个relationship元素首先指定了关系的id,然后是目标的内容类型,最后是目标文档部件。

XML 标记

将自定义 XML 架构附加到文档时,“XML 结构”任务窗格将提供该架构中定义的元素的一个列表。选择文档内容,然后从该列表中选择一个元素,可以将 XML 标记应用到文档。如果架构定义了某个元素的属性,还可以在“XML 结构”任务窗格中指定这些属性。

 注释   可以为一个文档附加多个架构。来自所有附加架构的元素会在“XML 结构”任务窗格的元素列表中列出。

窗格上的复选框允许您在文档上下文中查看内嵌的 XML 标记。

如果文档结构不符合架构规则,将会在文档中以紫色波浪线标记出来,并在“XML 结构”任务窗格中报告此违规错误。

利用文档信息面板,可以在使用Word文档时方便地查看和编辑文档属性。在 Word 中,文档信息面板显示在文档的顶部。您可以使用文档信息面板来查看和编辑标准的 Microsoft Office 文档属性,以及已保存到文档管理服务器中的文件的属性。如果使用文档信息面板来编辑服务器文档的文档属性,则更新的属性将直接保存到服务器中。

解析Word 2007文件

这个章节将带您浏览一个Word 2007新文件格式的文件中主要的文档部件。它还列出了这些部件之间的关系,并使用默认的目录结构来展示。

理解根级别的关系

所有使用Word XML格式的文件的第一个部件都一个virtual文档部件,或者是包本身,这称为起始部件。在这个起始部件中,包含了许多到顶级部件的关系,它描述了文档的内容:

表 2. 根级别的部件,关系和内容类型

部件名称

关系类型

内容类型

可选?

核心文档属性(在开放打包约定中定义的)

application/vnd.openxmlformats-package.core-properties+xml

特定应用程序的文档属性

application/vnd.openxmlformats-officedocument.extended-properties +xm

自定义的OLE文档属性

application/vnd.openxmlformats-officedocument.custom-properties +xml

主要的文档部件

application/vnd.openxmlformats-officedocument.wordprocessingml.main+xml

这四个默认的部件包含了主要的文档属性,也是到文档根部件的引用,这是主要的文档内容。

理解文档级别的关系

在主文档部件中,有一系列由主文档引用的文档部件的关系,如表3所示。

注意,下面大多数关系都拥有下面的前缀:

http://schemas.openxmlformats.org/officeDocument/2006/relationships/

表 3. 文档级别的部件,关系和内容类型

部件名称

关系类型

内容类型

可选?

样式定义

/styles

application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml

列表定义

/lists

application/vnd.openxmlformats-officedocument.wordprocessingml.listDefs+xml

文档设置

/settings

application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml

页眉

/header

application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml

页脚

/footer

application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml

脚注

/footnotes

application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml

尾注

/endnotes

application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml

图片

/image

image/[image extension], such as image/png or image/jpeg

注释

/comments

application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml

字体表

/fontTable

application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml

自定义XML项

/customXML

application/xml

Web设置

/webSettings

application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml

这个部件列表不是非常完整。例如,它不包括共享的部件,例如OLE对象,Microsoft ActiveX控件,和数字签名。但是,它为我们展示了一个典型Word 2007中Word XML格式的结构。

确定包URI 和内容类型名称

像上面所描述的那样,您可以使用一个URI引用所有的关系,和几乎所有的文档部件。一共有两种类型的URI:一个是文档部件,另一个是关系。

在新的Word XML 格式中,URI关系通常由下列标记开始:

http://schemas.openxmlformats.org/officeDocument/2006/relationships/

例如,应用程序级别属性使用的关系类型如下:

/extended-properties

这个URI包换了officeDocument,因为Office XML文件格式暗示了这些关系。

以 是例外。注意,它使用package而不是officeDocument,表示它遵循XPS Open Packaging Convention。这样的关系类型使用如下的URI前缀:

metadata/core-properties

URI描述了特定于文件的属性。关系URI是预先定义的。您不能修改它们。

文档部件的URI指向包中的文档部件。例如,包含文档主要信息的文档部件的默认URI是/word/document.xml。也就是说,主要的文 档信息包含在一个叫做document.xml的文件中,它位于包中根目录下的word目录中。佻可以重命名包中的文档部件,从而更改文档部件的URI。 非常重要的是,要在重命名或重新放置包中的文档部件时更新它们的关系。

XSL 转换

打开或保存 XML 文档时,可以应用以特定格式呈现 XML 数据的 XSL 转换 (XSLT) (XSL 转换 (XSLT):一种文件,用于将 XML 文档转换为其他类型的文档,例如 HTML 或 XML。设计本意是作为 XSL 的一部分使用。)) 文件。例如,您可能拥有一个将数据显示为规范的 XSLT,和另一个将相同数据显示为部件清单(其中计算了数量和价格)的 XSLT。

必赢备用网址 2打开文档时应用的 XSLT)

一个 XML 文档可能拥有多个与其关联的 XSLT。如果是这样,则必须选择您希望使用的 XSLT 来显示文档。这是在“XML 文档”窗格中完成的,该窗格列出了可用的 XSLT(数据视图)。

如果没有与 XML 文档关联的 XSLT,则 Word 会使用其默认 XSLT 或“仅数据视图”打开该文档。

如果文档附加了 Word XML 架构,即使该文档拥有一个与其关联的 XSLT,Word 打开文档时也不会应用该 XSLT。

 注释   可以定义解决方案将 XSLT 与特定类型的 XML 文档关联,而不是手动地应用 XSLT。需要在“架构库”中进行这种关联,可以在“模板和加载项”对话框(“工具”菜单)的“XML 架构”选项卡上访问“架构库”。

 

必赢备用网址 3保存文档时应用的 XSLT)

 

 

 

 

实现:

     XML Schema 是用来定义XML的结构文件,可以称之为XSD文件。而在Word及Excel中都支持添加架构文件,这样我们就可以使用XSD定义模板架构,将模板保存成XML格式,在报表生成时可以使用该模板生成相应的报表。

 

首先第一步:生成相应的XSD文件。

    

    根据面向对象的思想,现大多都是使用三层架构,就算多层其基本也是变,在Model层中有各实例对象若是使用NHibernate、第三方的数据访问层(如动软生成的)、微软的实体框架集等均是可以的。它只是根据实体类生成相应的架构文件。具体操作是:先将实体层在vs环境中生成dll文件,然后在VS的命令提示中输入【xsd  dll文件的路径】生成成功后,可以看到一个后缀为Xsd的文件路径。

 

第二步:生成模板

      找到路径下的xsd文件,如果是制作Word文档的模板(本文以Word为例),在新建的doc文件中,工具-模板与加载项-架构-添加架构  选择刚才生气的xsd文件,填上URL(命名空间)如: ,最好是选上 允许以XML文件保存不论是否有效。这样就可以查看到XML结构,然后在相应的位置插入相应的元素,同时还可以调整格式如:

必赢备用网址 4

 

完成后将其另存为xml格式文件,这样模板就做好了。

 

第三步:生成报表

这里我使用了一个封闭好了的类,其调用方式

 

必赢备用网址 5必赢备用网址 6代码

        lxp.ASC_BusinessReportThingInfo asc = new lxp.ASC_BusinessReportThingInfo(1);//实体类
        asc.Name = "叩亦杰";
        asc.Birthday = DateTime.Now;
//设置类中属性值

        WordReport rt = new WordReport(@"E:Word与Exsel报表学习Wordlxp.xml");//加载模板,Excel时就使用ExcelReport
        rt.InputData(asc);//加入数据
        rt.Save(@"E:Word与Exsel报表学习Word生成的lxp.doc");//保存

 

 

这样用户可自定生成的报表基本实现。

例如,您可能拥有一台跟踪文档编辑状态的服务器。当处理完文档时,可以打开文档信息面板,将文档的编辑状态从草稿变为终稿。当您将文档保存回服务器时,服务器上将更新编辑状态中的更改。

确定Word 2007文档中的非XML部件

Word 2007文档中所有嵌入的部件都是默认的Word XML格式。因此,如果您向文档中添加了一幅图片,那么您可以将文档重命名为.zip的扩展名,然后使用ZIP文件打开它。在包中,您可以定位图片,然后 打开它。如果图片是.png格式的,那么您可以直接从包中查看并打开.png文件。

类似的,如果您将一个Microsoft Office Visio文档嵌入到一个Word 2007文档中,那么您可以在包中定位到一个.bin文件。

这为开发人员创造了很多机会,来开放关于文档的解决方案。考虑一个场景,一个公司拥有成百上千份文档,它们都拥有相同的公司logo图片。如果需要更换公司的logo,那么您可以通过一个简单的脚本,来为每个文档使用新的logo替换原有的logo。

包中默认的图片位置是/word/media目录,而包中嵌入对象的默认位置是/word/embeddings。

图2显示了一个包含图片与嵌入对象的文档的目录结构。

必赢备用网址 7

图 2. 一个包含图片和嵌入对象的Word 2007文档的层次化文件结构

如果将文档模板存储在 Microsoft Windows SharePoint Services 3.0 服务器上的库中,该库可能会包括存储有关模板的信息的自定义属性。例如,您的组织可能会要求您填写“Category”属性,以对库中的文档进行分类。使用文档信息面板,就可以直接在 Word 环境中编辑此类属性。

从文档中分离内容

匹配到内容类型的文档部件由下列URI指定:

application/vnd.openxmlformats-officedocument.wordprocessingml.main+xml

它定义了大部分文档结构。在启用宏的文件中,这个部件匹配到application/vnd.ms- word.template.macroEnabledTemplate.main+xml,它定义了大部分文档结构。在前面[Content- Types].xml文件的代码示例中,内容类型匹配到/word/document.xml目录中的document.xml部件。

这个部件包含的XML与Word 2003中使用的WordprocessingML子集是相似的。还有一些图表、属性和字体的元素,它们描述了文档的基本结构。单独的部件描述了文档的所 有组件,例如页眉,页脚,列表和尾注。默认地,大多数这些部件都是下面内容类型文件的后继:

application/vnd.openxmlformats-officedocument.wordprocessingml.main+xml

如果您仔细的查看上面的[Content-Types].xml代码示例,您会发现里面列出了许多这样的部件。

将内容与格式的分离,使得我们可以比以前的版本更为简单地程序化处理一个文档的元素。使用WinFX System.IO.Packaging类型,您可以通过几行代码来修改文件,并且执行下面的任务:

1.

使用一个新的logo替换成百上千的文档中使用的旧logo。简单的定位图片,删除它,然后使用新图片替换它。

2.

更新服务器上所有文档中的页脚,从而更新公司名称。

3.

更改服务器上所有文档中的文本样式,从而使用一种新的公司字体。

当然,还可以建立更多的解决方案。通过这种内容的分离,定位部件进行编辑就要比Word 2003中的WordprocessingML更加简单。在WordprocessingML文件中,整个文档被描述在一个巨大的XML文件当中。解析这 个文件并且修改它是非常困难的。而且还是非常冒险的,因为如果出现了一个错误,那么将会损坏整个文档。相反,如果一个Word 2007文档中的一部分发生了损坏,那么文档剩余的部件还可以无误的打开。

理解数据存储

与许多Word XML格式中其它的数据类型相似,自定义XML数据也是单独的存储在文档当中的。每个项都存储为包中的一个单独的部件,这个数据出现以一个叫做 customXML的目录中,它位于包的根目录下。如果您使用程序通过将一个新的部件添加到文档的customXMLParts集合,将一个XML文件附 加到一个文档当中,然后默认地XML数据被存储在一个叫做/customXml/item1.xml的文件当中。如果您又从另外一个文件添加了一个自定义 XML数据,那么默认情况下,它会被存储到叫做/customXml/item2.xml的文件当中。

通过使用XMLMapping和XPath表达式,您可以将XML部件的特定元素映射到一个内容控制。也就是说如果使用程序来修改自定义XML,您 无需像Word 2003那样去解析整个WordprocessingML文件。而只需要查找保存自定义XML的部件,然后只修改这些文件的内容。

要向您的文档中添加自定义数据,您需要创建一个自定义XML文件,然后将它添加到ZIP包中。您还需要创建相应的关系,从主文档部件指向您的自定义XML部件。

在Word 2007的Word XML格式当中,每个自定义部件都表示文档容器中它自己的XML部件。这个自定义部件包含了文件名和它的关系信息。XML是存储在文档根目录下的一个叫作customXml的目录当中的。

图 3 显示了一个包含自定义XML数据文档的目录结构。

必赢备用网址 8

图 3. 包含自定义XML数据的Word 2007文档的层次化文件结构

文档包中独立的自定义XML数据,允许您无需处理其它的文档部件,便可以读取和更新自定义数据。

_rels目录中存储的关系文件,描述了Word XML格式的文档中,从一个XML部件到其它XML部件之间的关系。有两种自定义XML部件的关系类型。

XML的关系类型是:

http://schemas.openxmlformats.org/officedocument/2006/relationships/customXmlData

XML属性的关系类型是:

http://schemas.openxmlformats.org/officedocument/2006/relationships/customXmlProps

每个关系都有一个ID,您可以使得它来定位不同的数据存储。

实现的自定义XML部件是存储在_rels目录并列的文件当中。每个自定义XML部件都拥有一个叫作item##.xml的文件名,并且拥有它自己 的属性,叫做itemProps##.xml。在两个文件名中,##是数据存储中自定义XML部件的编号(1,2,3…)。Item##.xml自定义 XML部件的文件格式如下所示:

<o:dataStoreItem>

<o:dataStoreItem o:itemID="MSXID for the custom XML part"/>

<o:xmlSchemaRef o:relID="relationship ID to a schema"/>

</o: dataStoreItem>

Walkthrough:创建一个Word XML格式文件

Document.xml是Word XML格式中唯一需要的部件。有关更多如何创建一个最小化文档的信息,请查看创建文档小节。

为了解释文档部件、内容类型项和关系项如何协同工作,这个章节将在Word 2007中构建一个更为复杂的Word XML格式文档。这个教程帮助您理解如何使用Word XML格式访问和修改文档内容。

要创建一个包含内容类型和关系项的Word 2007文档,您需要创建一个根目录,它包含一个特定的目录和文件结构,如图4所示。

必赢备用网址 9

图4. Word 2007文档的目录和文件结构

在您创建完所有的目录和文件后,下个小节将带您向每个文档部件添加所需的XML代码。

创建文档属性

首先,您需要为文档属性创建两个XML文件:

1.

创建一个叫作root的目录。

2.

在root目录中创建一个叫作docProps的目录。

3.

打开记事本或其它的XML编辑器。

4.

将下面的代码复制粘贴到一个新的文件,并将它保存为app.xml,并保存在docProps目录中:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

        <Properties xmlns= "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" 

        xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">

        <Template>Normal.dotm</Template>

        <TotalTime>1</TotalTime>

        <Pages>1</Pages>

        <Words>3</Words>

        <Characters>23</Characters>

        <Application>Microsoft Office Word</Application>

        <DocSecurity>0</DocSecurity>

        <Lines>1</Lines>

        <Paragraphs>1</Paragraphs>

        <ScaleCrop>false</ScaleCrop>

        <Company>MS</Company>

        <LinksUpToDate>false</LinksUpToDate>

        <CharactersWithSpaces>25</CharactersWithSpaces>

        <SharedDoc>false</SharedDoc>

        <HyperlinksChanged>false</HyperlinksChanged>

        <AppVersion>12.0000</AppVersion>

        </Properties>

        

5.

打开记事本或其它XML编辑器。

6.

将下面的代码复制粘贴到一个新的文件,并将它保存为core.xml,并保存在docProps目录中:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

        <cp:coreProperties xmlns:cp= "http://schemas.openxmlformats.org/package/2006/metadata/core-properties" 

        xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" 

        xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance">

        <dc:title></dc:title>

        <dc:subject></dc:subject>

        <dc:creator>Your name</dc:creator>

        <cp:keywords></cp:keywords>

        <dc:description></dc:description>

        <cp:lastModifiedBy>Your name</cp:lastModifiedBy>

        <cp:revision>2</cp:revision>

        <dcterms:created xsi:type="dcterms:W3CDTF">2006-05-03T01:13:00Z</dcterms:created>

        <dcterms:modified xsi:type="dcterms:W3CDTF">2006-05-03T01:14:00Z</dcterms:modified>

        </cp:coreProperties> 

        

创建文档

接下来,您需要为文档部件创建一个XML文件。这个部件是新Word XML格式中唯一需要的部件。

1.

创建一个叫作root的目录。

2.

在root目录中创建一个叫作word的目录。

3.

打开记事本或其它的XML编辑器。

4.

将下面的代码复制粘贴到一个新的文件,并将它保存为document.xml,并保存在word目录中:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

        <w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" 

        xmlns:o="urn:schemas-microsoft-com:office:office" 

        xmlns:o12="http://schemas.microsoft.com/office/2004/7/core" 

        xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 

        xmlns:m="http://schemas.microsoft.com/office/omml/2004/12/core" 

        xmlns:v="urn:schemas-microsoft-com:vml" 

        xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/3/wordprocessingDrawing" 

        xmlns:w10="urn:schemas-microsoft-com:office:word" 

        xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/3/main">

        <w:body>

        <w:p>

        <w:r w:rsidR="002847EC">

        <w:t>Word 2007 rocks my world!</w:t> 

        </w:r>

        </w:p>

        </w:body>

        </w:document>

        

创建一个关系

接下来,您需要为这个部件创建一个关系。这个关系被记录在_rels目录当中,也就是说这个关系是在包的根目录之外。要创建关系:

1.

在root目录中创建一个叫作_rels的目录。

2.

打开记事本或其它的XML编辑器。

3.

将下面的代码复制粘贴到一个新的文件,并将它保存为.rels,并保存在_rels目录中:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

        <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">

        <Relationship Id="rId3" Type= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>

        <Relationship Id="rId2" Type= "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>

        <Relationship Id="rId1" Type= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/>

        </Relationships>

        

4.

注意,这个XML创建一个ID为rID1的officeDocument类型到一个叫做word的目录中的document.xml文件的关系。

定义内容类型

下一步,您需要定义这个文件的内容类型。

1.

注意,内容类型定义文件的结构如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

        <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">

        <Default Extension="rels" ContentType= "application/vnd.openxmlformats-package.relationships+xml"/>

        <Default Extension="xml" ContentType="application/xml"/>

        <Override PartName="/word/document.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/>

        <Override PartName="/word/styles.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/>

        <Override PartName="/docProps/app.xml" ContentType= "application/vnd.openxmlformats-officedocument.extended-properties+xml"/>

        <Override PartName="/word/settings.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"/>

        <Override PartName="/word/theme/theme1.xml" ContentType= "application/vnd.openxmlformats-officedocument.theme+xml"/>

        <Override PartName="/word/fontTable.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"/>

        <Override PartName="/word/webSettings.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml"/>

        <Override PartName="/docProps/core.xml" ContentType= "application/vnd.openxmlformats-package.core-properties+xml"/>

        </Types>

        

2.

打开记事本或其它XML编辑器。

3.

将上面的代码复制粘贴到一个新的文件,并将它保存为[Content_Types].xml,并保存在root目录中:

注意 保留的文件名是由开放打包约定来使用的,它定义了包中所有文件的内容类型。

创建包

最后,您可以将这些文件放到一个ZIP包中,从而创建一个有效的Word 2007文档:

1.

使用任何ZIP工具,将simpledocument目录中所有的内容保存到一个ZIP文档,包括下面的子目录:docProps目录,word目录,和_rels目录。也包括[Content_Types].xml。

重点注意 不要简单的将simpledocument目录添加到一个ZIP文件,否则在Word 2007中打开文件时可能会收到一个内部错误。您特别需要将simpledocument目录所有的子目录添加到ZIP包中。

2.

将这个包保存为simpledocument.docx。

现在,您可以在Word 2007中打开这个文件,然后查看包的内容:

必赢备用网址 10

图 5. Simpledocument.docx 在Word 2007中的显示

结论

与以前的Word版本中保存的二进制文件格式相比,Word 2007中新的Word XML格式拥有许多优势。ZIP包所带来的文件尺寸要更加小。文件也更加稳定 - 如果文件中的一部分损坏,那么您仍旧可以打开其它的文档元素,即使一部分已经损坏。

另外,也非常便于使用程序或手动地修改、添加或者删除数据。这种文件可以使用Microsoft WinFX System.IO.Packaging类来访问。您只需编写几行代码,便可以修改服务器上的文件。您可以从它自己单独的部件中访问和处理自定义XML数 据。您也可以使用事件来触发XML数据的更改。例如,佻可以将一个内容控件匹配到一个包含股票配额的XML元素,然后在打开文档时自动的获取最新的配额信 息,从而确保用户可以看到当前的价格。

这种可行性和易用性,使得您可以编程新的Word XML格式,并且充分利用Microsoft Office的巨大优势。