分享

XML和Excel

 yuxinrong 2010-01-29
 

题注:本文译自www.jkp-ads.com,供有兴趣的朋友参考。
什么是XML
XML是可扩展标记语言(eXtended Markup Language)的缩写。对于网页来说,XML是标准的设想,目标是容易搜索网页中的信息。其原理是对信息添加描述性的“标记(tags)”,使信息容易查找和分类。例如,所有的笑话可以被标记

<joke></joke>

所包围,这样,搜索引擎只会寻找网页中的这些标记以找到所有的笑话,图1展示了一段XML“代码”。正如您所看到的,它看起来很像HTML。这意味着XML是HTML的方言吗?

图1:在IE中显示的XML文件
就像HTML一样,XML是所谓的标记语言或元语言,一种提供另一种语言的信息的语言,或者换句话说,提供关于其内容的信息的语言。标记代码长期以来都围绕着内容。在出版时,编辑开始使用标记来指明何种格式需要被应用到文本的哪部分。
在六十年代,IBM开发了“通用标记语言”(GML),能够处理相同的电子档案。在1986年,GML被进一步扩展,并且成为了ISO标准,称为“标准通用标记语言”(SGML)。
后来,在瑞士欧洲核子研究中心研究所(CERN)的研究人员更进一步地扩展了SGML,因为他们需要一种标记他们的带有格式说明的电子存储出版物的方式。他们的文档包含了大量对其它资源、数学公式以及其它复杂信息的链接,他们希望在每个人的系统中都有同样的显示,并且他们期望容易搜索。结构化的CERN设计是当前HTML的基础。
因此,HTML和XML都来源于SGML,即“标准通用标记语言”。两种标准都由万维网联盟(World Wide Web consortium,即W3C)管理。
XML和HTML都使用“标记”,但是标记的目的不同。HTML主要是一种标准,用于定义信息的格式。一个能够使用的HTML标记是在标准里已经预定义了的,原则上没有创建自已的标记的自由。此外,HTML标记不会传递关于信息的实际内容的信息,只是代表。而XML则集中于标准信息的类型,而不是指定格式。在XML中,用户决定需要什么标记,XML标准仅仅设置了XML文件的结构。
XML的特征
XML有一些重要的特征(摘自Addison Wesley出版社的《Professional Excel Development》):

  • XML是一种结构化的格式,这意味着我们可以严密地定义在文件中如何排列、组织和表达数据。当我们获得一个文件,在导入数据之前,我们可以检验该文件是否遵循特定的结构。当我们预先知道了文件的结构,就知道其包含的内容以及如何处理每项。在XML之前,在文本文件中唯一的结构是位置,例如知道第四个逗号之后的文本应该是出生日期,然而没有办法验证是否是出生日期还是单纯的日期,也无法验证其使用的是日/月/年还是月/日/年顺序。
  • XML是一种描述性的格式,这意味着在文本文件里,数据的每一项都有名称,该名称对人和机器都具有可读性并且具有独立标识。我们能够打开文件,阅读其中的内容并理解包含的数据,无须参考其它文档来查找第四个逗号后的文本代表什么。同样,我们能够很自信并正确地编辑文档。
  • XML可以容易地描述层级数据以及数据间的相互关系。如果我们想导入和导出作家列表,包含作家的姓名、地址和著作,那么采用合理格式的CSV文件则一点也不直接。使用XML,可以定义作家项以及其姓名、地址和多个著作项。也可以定义著作项及其标题、出版商和ISBN。层级和关系按自然顺序来定义。
  • 能够验证XML,这意味着我们可以提供第二个XML文件——XML架构定义文件——准确地描述如何构造XML数据文件。在处理XML文件之前,可以将其与架构比较来确保文件遵循我们期望接受的结构。
  • XML是一种可识别的格式,这意味着程序(包括Excel 2003/2007)可以解析XML数据文件,推断数据项之间的结构和关系。这也意味着我们可以读取XML文件,推断其结构并生成遵循相同结构的新的XML数据文件,显然新XML数据文件将会通过验证。
  • XML是一种强类型格式,这意味着架构定义文件指定每个元素的数据类型。当导入数据时,应用程序能够检查架构定义从而识别导入的数据类型。我们不再担心将产品代码01-03作为日期导入。
  • XML是一种全球统一的格式。在XML文件中仅有一种表示数字的方式(US数字格式),并且仅有一种表示日期的方式。我们不再需要检查是使用美语设置还是法语设置创建CSV文件,并相应地调整对其的处理。
  • XML是一种标准的格式。万维网联盟(W3C)指定XML文件内容的定义方式,允许应用程序(包括Excel 2003/2007)读取、理解和验证XML文件的结构,并且遵循特定的结构创建文件。同时,允许不同的应用程序读取、写入、理解和验证相同的XML文件,允许我们以一种相当健壮的方式在应用程序间分享数据。

XML文件的结构
图1显示的XML代码是相当容易读取并理解的(即下载的示例文件中的test_en.xml文件)。
第1行(蓝色的)表示我们正在处理XML文件。该行应该出现在每个XML文件中。该文件包含信息和在信息周围成对的打开的和关闭的标记。一组打开的和关闭的标记及其中的信息称作元素。下面的文本显示了完整的元素:

<name>Joe Jackson</name>

上面显示的XML示例包含下列已命名的元素:
companies,company,companyname,employee,code,name,street,houseno,areacode,place,phone。
标记名是区分大小写的,“name”与“Name”不是相同的名称。标记的特征是将文本放置在尖括号内:

<tag>

每个标记必须对应着一个关闭的标记:

</tag>

在打开的和关闭的标志之间的所有文本都属于该标记。
如果在标记之间没有内容,那么可以将打开的和关闭的标记组合成一个自关闭的标记:

<tag/>

当没有内容或者当标记的内容带有该标记的属性时,这样处理:

<name name=“Jan Janssen”/>

等价于:

<name>Jan Jansen</name>

属性的使用实际上不会改善可读性,建议使用成对的打开和关闭标记。
XML文件的第2行包含根元素的开始标记:

<companies>

元素“companies”就是所谓的XML文件的根元素。每个XML文件必须包含一个根元素。将XML文件与根相比较:树有一个树干,如果有多个树干,我们称为灌木,而不是树。
第3行表明元素“companies”的开始。在“companies”元素里,可以嵌套多个“company”元素。第4行显示全部的“companyname”元素,之后的第5至27行包含了“Stanford and Son”公司三个雇员的数据。
XML的强大在于方便理解数据的结构以及XML文件的意图,所需做的只是看一看该文件。同时,可以设想在该文件中添加新公司,并且能够很简单地添加雇员信息。
XML架构
一个XML文件有一个依附于它的架构定义(XSD),架构定义确定XML文件的结构。此外,XSD文件还可以定义:

  • 元素里面的数据格式(字符串、数字,等等)
  • 元素是否是强制的
  • 元素是否能重复

要依附一个XML文件到架构,对架构文件的引用必须包含于XML文件里。能够添加架构引用作为根元素的属性,例如:

<companies xmlns:xsi="http://www./2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Schema.xsd">

粗体文本创建对架构文件schema.xsd的引用,本例中该文件必须放置在与xml文件相同的文件夹中。无须理解架构定义准确语法的细节,下面是与文件test1_en.xml相联系的架构定义:
Listing 1: Schema.xsd

<?xml version='1.0' encoding='UTF-16'?>
<!-- XmlMap.DataBinding.SourceUrl: C:\Data\OfficeMagazine\XML\test2.xml -->
<xsd:schema xmlns:xsd="http://www./2001/XMLSchema">
<xsd:element name="companies">
<xsd:complexType>
<xsd:sequence minOccurs="0">
<xsd:element minOccurs="0" name="company" >
<xsd:complexType>
<xsd:sequence minOccurs="0">
<xsd:element minOccurs="0" type="xsd:string" name="companyname" />
<xsd:element minOccurs="0" maxOccurs="unbounded" name="employee" >
<xsd:complexType>
<xsd:sequence minOccurs="0">
<xsd:element minOccurs="1" type="xsd:string" name="code" />
<xsd:element minOccurs="1" type="xsd:string" name="name" />
<xsd:element minOccurs="0" type="xsd:string" name="street" />
<xsd:element minOccurs="0" type="xsd:string" name="houseno" />
<xsd:element minOccurs="0" type="xsd:string" name="areacode" />
<xsd:element minOccurs="0" type="xsd:string" name="place" />
<xsd:element minOccurs="0" type="xsd:string" name="phone" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

很明显,这样一个架构与相关联的XML文件相比,很难阅读。点此获取关于架构的更多信息
扩展的样式表
扩展样式表(xsl文件)xml文件能够被转换成其它的格式,例如SpreadsheetML,即支持电子表格的XML格式。关于这些样式表如何工作的介绍已超出了本文的范围。在w3c的网站上可以获得更多关于扩展样式表的信息
Excel中的XML
现在,让我们使用Excel来处理XML文件。使用Excel 2003/2007导入XML数据是非常简单的。不巧的是,XML功能仅仅可用于Microsoft Office专业版或旗舰版,或者从单独购买的Excel程序包安装的Excel。当从Excel中打开文件时,可以看到可用的Excel文件中的XML文件类型,如下图2所示。

图2:Excel 2007的文件——打开窗口
选择文件test_en.xml,出现如下图3所示的窗口。

图3:Excel询问怎么处理XML文件
选择第3个选项,Excel将分析XML文件的结构,并在任务窗格中呈现结构(如图4)。此时Excel不会打开该XML文件。

图4:XML文件的结构在任务窗格中显示
能够将XML文件的元素绑定到工作表单元格中,只需简单地从任务窗格将它们拖动到Excel单元格中即可。如图5所示。

图5:拖动元素到Excel单元格后的结果
拖动包含多个其它元素的元素(或者使用Ctrl+单击或Shift+单击选择任务窗格中的多个元素)到Excel单元格,所有元素作为列表依次放置,如图6所示。

图6:拖动“employee”元素到工作表中后产生的列表
现在,我们已经定义了能够从XML文件中导入数据的模板。我们能够从test_en.xml中导入数据,只需按“表工具 设计”选项卡中“外部表数据”的“刷新”按钮,或者单击Excel 2003列表工具条中的“刷新XML数据”按钮,将从test_en.xml中读取数据到我们新创建的模板,如图7和图8所示。

图7:使用功能区刷新数据

图8:导入数据后的结果
要将不同的文件导入到相同的结构,使用连接属性对话框。如图9所示,单击“刷新”按钮下拉箭头,可以找到连接属性命令。

图9:改变连接属性以导入另一个XML文件到Excel
单击连接属性后,出现“连接属性”对话框,单击其中的“定义”选项卡,然后单击“浏览”按钮访问不同的XML文件。
XML验证
非常奇怪,缺省情况下根据其依附的架构定义的ML文件的验证是关闭的。打开该选项将迫使Excel在导入和导出时根据架构检查每个XML文件。
首先,包含对架构引用的XML文件必须被映射到Excel单元格。关闭Excel中所有不需要的文件,然后打开test2-en.xml文件。我已经忽略了该文件中第一个雇员的名字。并且,选择“使用XML源任务窗格”选项。将“employee”拖动到任一单元格中。接着,单击功能区表工具选项卡中的属性按钮,如图10所示。

图10:功能区中的XML属性按钮
此时,出现“XML映射属性”对话框:

图11:XML映射属性对话框
单击“根据架构验证进行导入和导出”旁的复选框。
现在,单击“刷新”按钮从test2_en.xml中导入数据,将出现下面的对话框:

图12:导入违反架构的XML文件导致错误消息
单击“详细信息”按钮,Excel将显示更多关于使用该XML文件发生的错误的信息(如图13)。此时,Excel指出不接受出现的元素“Street”,应该是“name”。之所以导致这个错误消息,是因为忽略了name标记,因而该标记不在XML文件中应该出现的位置。虽然出现了错误消息,但Excel仍然会导入数据。

图13:违规的XML文件导致验证错误的详细信息
在导出数据时,验证也会工作。打开文件ExcelXML_en.xlsx,完全移除名称列。此时,试着导出XML列表(如图14)。

图14:单元格右键菜单,XML选项,导出

图15:导出违反架构的XML数据之后的错误消息
小结
本文仅仅介绍了XML的一些非常基础的知识:XML是什么以及它可能是什么。例如,这里没有介绍XML提供的共享选项的信息:非常容易跨平台重复使用数据。下面是一些关于XML更多信息的资源。
参考资源
XML:http://www./XML/
MSDN和XML:http://msdn.microsoft.com/xml/
架构(Schemas):http://www./TR/xmlschema-0/
扩展样式表(Extensible Stylesheets):http://www./Style/XSL/
关于Excel和XML:
http://office.microsoft.com/nl-nl/assistance/HP030737771043.aspx
关于Word和XML:
http://office.microsoft.com/nl-nl/assistance/CH060832811043.aspx
本文示例下载:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多