Word 2007 XML 解压缩格式

简介

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

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

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格式的开放打包约定

开放打包约定指定了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. 一个典型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,然后是目标的内容类型,最后是目标文档部件。

解析Word 2007文件

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

理解根级别的关系

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

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

部件名称 关系类型 内容类型 可选?

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

http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties

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

特定应用程序的文档属性

http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties

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

自定义的OLE文档属性

http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties

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

主要的文档部件

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

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/

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

http://schemas.openxmlformats.org/officeDocument/2006/relationships/ /extended-properties

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

以http://schemas.openxmlformats.org/package/2006/relationships/开头的关系类型 是例外。注意,它使用package而不是officeDocument,表示它遵循XPS Open Packaging Convention。这样的关系类型使用如下的URI前缀:

http://schemas.openxmlformats.org/package/2006/relationships/ metadata/core-properties

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

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

确定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显示了一个包含图片与嵌入对象的文档的目录结构。

.

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

从文档中分离内容

匹配到内容类型的文档部件由下列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数据文档的目录结构。

.

图 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所示。

.

图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中打开这个文件,然后查看包的内容:

.

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

结论

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

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

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

原文地址:https://www.cnblogs.com/DeeLMind/p/7240092.html