2.3 XML声明

大部分XML文档都以XML声明开始,XML声明向解析器提供了关于该文档的基本信息。通常建议为XML文档增加XML声明,但声明并不是必需的。


alt注意

如果需要为XML文档使用声明,则声明必须放在XML文档的第一行。


第一行的XML声明告诉XML处理程序:下面的内容遵循该标准。XML文档声明以“<?”开始,以“?>”结束。如果指定了XML文档声明,则必须同时指定声明的version属性,该属性通常为1.0,表明该文档遵守XML 1.0规范。除此之外,XML文档声明还包括两个可选属性:

alt encoding:指定对该XML文档进行解码所用的字符集。

alt standalone:指定该文档是否需要引用其他资源。该属性只接受yes或no两个值。

一个完整的XML文档声明如下:

alt

这个XML声明中,version属性是必需的,而且通常该属性都排在第一位。而后面两个属性都是可选的。如果没有指定encoding属性,则默认采用UTF-8的编码方式。如果XML文档全部是西欧字符,则无须指定任何字符集,因为几乎所有字符集中西欧字符的编码都是相同的。但如果需要使用中文等亚洲文字,则最好设置对应的字符集。


alt注意

Unicode是一种全球通用的字符集,这种字符集号称可以表示地球上的任何文字。实际上,Unicode已经逐渐开始取代ASCII和Latin-1字符集。这种字符集不仅可以表示绝大部分国家的文字,而且提供了一个全面的数学与技术符号集,用于简化科学信息交换。而UTF-8则是一种简便的、向后兼容的字符集,它使得那些以ASCII为字符集而设计的操作系统,如UNIX或Linux,也可使用Unicode。UTF-8与Unicode之间存在细微差异。


下面是几种常见的字符集:

alt 简体中文:GBK或GB2312。

alt 繁体中文:BIG5。

alt 西欧字符:ISO8859-1。

alt 通用的国际编码:Unicode。

如果XML文档编码指定得不对,将导致该文档无法正确解析。看下面的XML文档:

程序清单:codes\02\2.3\errorEncoding.xml

alt

上面的XML文档是之前那个格式良好的XML文档的片段,理论上应该没有任何问题。但因为笔者将XML声明的encoding属性删除了,而删除该属性意味着将使用默认字符集进行编码——即采用UTF-8字符集,而文档的内容全部是简体中文,所以在浏览器中浏览该文档将出现图2.6所示结果。

alt

图2.6 字符集错误时的XML文档


alt学生提问:UTF-8不是兼容Unicode吗?那UTF-8也应该支持中文啊,为什么上面的XML文档会出现字符集错误的情况呢?


答:UTF-8确实是兼容Unicode的,也确实对中文有很好的支持,但需要指出的是:当我们使用文本编辑工具保存XML文档(其实质还是文本文件)时也涉及字符集的问题。众所周知,磁盘上的所有文件都以二进制形式保存(不管是图片、文本,还是电影都一样),这意味着保存文本文件时需要将文件中的字符转换为二进制码(这个过程称为编码)再保存;类似地,当使用文本编辑工具读取文本文件时,则需要将二进制码反转换为字符(这个过程称为解码)。图2.7展示了相互转换的过程:

alt

图2.7 文本文件存取示意图

如图所示,文本文件保存、读取时分别使用字符集进行编码、解码。因此,为了正常获取文本文件的内容,保存、读取文件时必须采用相同的字符集。XML文档声明部分encoding属性指定的是读取XML文档时所使用的字符集,该字符集必须和保存文件时所使用的字符集一致才行。简体中文Windows平台保存文件默认使用GBK字符集,而XML文档的encoding属性值默认是UTF-8,因此才会出现图2.6所示错误。

alt


为了可以使用默认的字符集对上面的XML文档进行解码,需要在保存该XML文档时显式指定使用UTF-8字符集,在EditPlus中保存文件时可以通过单击图2.8所示下拉列表进行选择。

alt

图2.8 保存文件时自行选择编码的字符集

通过图2.8所示方式保存后即可正常浏览,可见使用UTF-8字符集的XML文档也是可以支持中文的。


alt注意

XML声明部分的encoding属性值应与保存该文档时所使用的字符集相同。如果需要让XML文档支持中文,应注意如下两点:① 保存该文件时使用支持中文的字符集;② XML声明部分的encoding属性值应与保存该文件时所使用的字符集相同。