1、 XML文件结构 一个XML文件通常包含文件头和文件体两大部分 1. 文件头 XML文件头由XML声明与DTD文件类型声明组成。其中DTD文件类型声明是可以缺少的,关于DTD声明将在后续的内容中介绍,而XML声明是必须要有的,以使文件符合XML的标准规格。 在前面的Flowers.xml文件中的第一行代码即为XML声明: 其中: “”代表一条指令的开始,“?>”代表一条指令的结束; “xml”代表此文件是XML文件; “ version="1.0"
2、 ”代表此文件用的是XML1.0标准; “ encoding="gb2312" ” 代表此文件所用的字符集,默认值为Unicode,如果该文件中要用到中文,就必须将此值设定为gb2312。 注意:XML声明必须出现在文档的第一行。 2. 文件体 文件体中包含的是XML文件的内容,XML元素是XML文件内容的基本单元。从语法讲,一个元素包含一个起始标记、一个结束标记以及标记之间的数据内容。 XML元素与HTML元素的格式基本相同,其格式如下: <标记名称 属性名1="属性值1" 属性名1="属性值1" ……>内容标记名称> 所有的数据内容
3、都必须在某个标记的开始和结束标记内,而每个标记又必须包含在另一个标记的开始与结束标记内,形成嵌套式的分布,只有最外层的标记不必被其他的标记所包含。最外层的是根元素(Root),又称文件(Document)元素,所有的元素都包含在根元素内。
在前面的Flowers.xml文件中,根元素就是
4、小写 在HTML中是不区分大小写的,而XML区分大小写,包括标记,属性,指令等。 3. 标记 XML标记与HTML标记相同,“<”表示一个标记的开始,“>” 表示一个标记的结束。XML中只要有起始标记,就必须有结束标记,而且在使用嵌套结构时,标记之间不能交叉。 在XML中不含任何内容的标记叫做空标记,格式为:<标记名称/> 4. 属性 XML属性的使用与HTML属性基本相同,但需要注意的是属性值要加双引号。 5. 实体引用 实体引用是指分析文档时会被字符数据取代的元素,实体引用用于XML文档中的特殊字符,否则这些
5、字符会被解释为元素的组成部分。例如,如果要显示“<”,需要使用实体引用“<”否则会被解释为一个标记的起始。 XML中有5个预定义的实体引用,如表 4.1所示。 表 4.1 XML预定义的实体引用 < < > > " " ' ' & & 6. CDATA 在XML中由一个特殊的标记CDATA,在CDATA中所有文本都不会被XML处理器解释,直接显示在浏览器中,使用方法如下: 7. 处理指令 处理指令使用来给处理X
6、ML文件的应用程序提供信息的,处理指令的格式如下: 例如,XML声明就是一条处理指令: 其中,“xml”是处理指令名称,version="1.0" encoding="gb2312"是处理指令信息。 4.2 XML与CSS 利用CSS可以用来设定XML文件的显示方式,即在XML文件的头部,XML声明的下面加入下面一条语句:
7、件的URL"?> 下面我们通过例子来介绍如何利用CSS来显示XML文件。首先建立一个css文件,代码如下: flowers.css:一个显示XML文件的CSS样式 flower{font-size:24px; display:block} vendor{font-size:36px;color:red} price{display:block} 然后,在flowers.xml文件中使用这个css样式,即在flowers.xml文件中的XML声明下面加入以下语句:
8、ers.css"?>
完整的程序代码如下:
ex4_3_01.xml:利用CSS 显示XML文件
9、p2
10、的所有数据都会被全部显示,不能改变原文件的结构和内容的顺序。另外,CSS并不支持中文标记,因为CSS 不是专门为XML开发的样式语言,而下面要介绍到的XSL就可以,XSL是特别为XML设计的,它比CSS更为复杂。 4.3 XSL 在上一节介绍的用CSS显示XML文件,效果不是很理想,实际上,CSS主要是适合HTML文件,对于XML这种数据文件,CSS就不适合了,尤其是对那些需要按照不同的条件将文件内容重新排列显示的情况,而用XSL就可以。 XSL是当前最强大和灵活的样式语言,是特别为应用XML而设计的,它比CSS要复杂的多。但是,目前它还未被很好的支持,也还没有最后完成。
11、
利用XSL来设定XML文件的显示方式,即在XML文件的头部,XML声明的下面加入下面一条语句:
下面我们通过例子来介绍如何利用XSL来显示XML文件。首先建立一个xsl文件,代码如下:
flowers.xsl:用来显示XML文件的xsl文件
12、e match = "/">
13、t="Vendor"/>
Vendor
Flower
Price
14、的XML文件。XSL的根元素是xsl:stylesheet,即一个XSL文件必须以 15、e-of select="模式"/>
如果要取得多个元素,则要使用xsl:for-each元素,格式如下:
16、ing="gb2312"?>
17、Flower>
18、式处理文档时,元素能够帮助更好地理解文档。元素的描述性越强,文档各部分越容易识别。自从出现标记至今,带有标记的内容就有一个优势,即在计算机系统缺失时,仍然可以通过标记理解打印出来数据。
标记语言从早期的私有公司和政府制定形式逐渐演变成标准通用标记语言(Standard Generalized Markup Language,SGML)、超文本标记语言(Hypertext Markup Language,HTML),并且最终演变成 XML。SGML 比较复杂,HTML(实际上仅是一组元素集)在识别信息方面不够强大。XML 则是一种易于使用和易于扩展的标记语言。
您可以使用 XML 创建自己的 19、元素,从而能够更精确地表示自己的信息。您可以在文档内部识别每个部分,而不是将文档看作仅由标题和段落组成。为了提高效率,您可能需要定义数量一定的元素,并统一使用它们。(您可以在文档类型定义(Document Type Definition, DTD )或模式 (schema)中定义元素,稍后我将对此进行简要的描述)。一旦习惯使用 XML 之后,就可以在构建文件时尝试处理元素名称。
构建 XML
如前所述,XML 文件由内容和标记组成。您通过以标记包围内容的方式将大部分内容包含在元素中。例如,假设您需要创建一本 XML 烹饪书。您需要用 XML 编写名为 Ice Cream Sundae 的食 20、谱。为了标记食谱名,您需要将这个文本包含到元素中,即分别在文本的首末两端添加开始和结束标记。可以将元素命名为 recipename。要标记元素的开始标记,像这样将元素名放到尖括号中(<>): 21、加何种元素的规则。这些规则可以是严格的,也可以是松散的,这完全由您决定。一定要为文档创建元素,以识别您认为重要的部分。
开始创建 XML 文件
XML 文档的第一行可以是一个 XML 声明。这是文件的可选部分,它将文件识别为 XML 文件,有助于工具和人类识别 XML(不会误认为是 SGML 或其他标记)。可以将这个声明简单地写成 ,或包含 XML 版本(),甚至包含字符编码,比如针对 Unicode 的 。因为这个声明必须出现在文件的开头,所以如果打算将多个 22、小的 XML 文件合并为一个大 XML 文件,则可以忽略这个可选信息。
创建根元素
根元素的开始和结束标记用于包围 XML 文档的内容。一个文件只能有一个根元素,并且需要使用 “包装器” 包含它。清单 1 显示了经过删节的示例,其中的根元素名为 23、致
创建 XML 时,要确保开始和结束标记的大小写是一致的。如果大小写不一致,在使用或查看 XML 时将出现错误。例如,如果大小写不一致,Internet Explorer 将不能显示文件的内容,但它会显示开始和结束标记不一致的消息。
到目前为止,都使用 24、符号,或它们的混合)。
· 对大小写没有限制,但前后要保持一致,以免造成混乱。
我们继续以前面的示例为例,如果添加了名为 25、用内部不包含任何内容的空标记,这些标记可以表示为单个标记,而不是一组开始和结束标记。以类似于 HTML 的文件为例,里面的 26、ime>。 27、"UTF-8"?>
28、
30、ptime>
31、元素都包含 type 属性,以对菜谱进行分类。能够正确验证并确保存在属性值是非常重要的(避免出现双关语)。
验证 就是根据元素规则检查文档的结构,以及如何为每个父元素定义子元素。这些规则是在 文档类型定义(Document Type Definition,DTD)或模式(schema )中定义的。验证要求您创建自己的 DTD 或 schema ,然后在 XML 文件中引用 DTD 或 schema 文件。
为了实现验证,必须在 XML 文档的顶部附近包含文档类型(DOCTYPE)。这行代码将引用用于验证文档的 DTD 或 schema (元素和规则列表)。例如,DOCTYPE 可能类似于 32、清单 5。
清单 5. DOCTYPE
1
这个例子假设元素列表文件的名称是 filename.dtd,并且位于您的计算机上(如果指向公共文件位置,则 SYSTEM 和 PUBLIC 是相对的)。
使用实体
实体 可以是文本短语或特殊字符。它们可以指向内部或外部。必须正确地声明和表示实体,以避免错误和确保正确显示。
您不能直接在内容中输入特殊字符。如果要在文本中使用符号,必须使用它的字符代码将它设置为实体。您可以将短语(比如公司名)设置为实体,然后就可以在内容中使用该实体。为了设置实体,必须先为它创建 33、一个名称,然后将它输入到内容中,以 and 符号(&)开始,并以分号(;)结束 — 例如,&coname;。然后在 DOCTYPE 的方括号([])内部输入代码,如 清单 6 所示。这个代码识别表示实体的文本。
清单 6. ENTITY
1
2
3
使用实体可以避免反复输入相同的短语和信息。在很多情况下它还使得调整文本更加容易(变更公司名时),只需对实体定义进行简单调整。
避免错误
在学习创建 XML 文 34、件时,在 XML 编辑器中打开它,以检查它的结构是否良好,并且确保您遵循 XML 规则。例如,如果您使用 Windows® Internet Explorer®,就可以在浏览器中打开 XML。如果它能够显示 XML 元素、属性和内容,则表明 XML 是构造良好的。相反,如果显示错误,则很可能是出现语法错误,您需要小心检查文档,看看是不是丢失标记和标点符号或输入错误。
如在 嵌套元素 小节中提到的一样,包含其他元素的元素就是被包含元素的父元素。在下面的示例中, 35、ist>、 36、
37、chocolate syrup or chocolate fudge
38、listitem> 39、irections>
40、
41、 图 1 中,Internet Explorer 清晰显示了所有元素。内容包含在开始和结束标记之间。父元素旁边有小加号(+)和小减号(-),它们允许您展开或收缩嵌套在内部的所有元素(它们的后代)。
图 1. 收缩了一些同胞元素的示例 XML 实例(文件)
结束语
除了一些简单的规则之外,您可以随意设计 XML 元素和属性。XML 的规则并不难。真正困难的是 根据可分类性和可搜索性找出文档中有价值的内容,然后根据您的需要设计元素和属性。
当您有了明确的目标,并知道如何标记内容的时候,您可以构建高效的元素和属性了。从这个角度看,小心进行标记是创建构造良好并且有效的 XML 的根本条件。
是一个独立的元素。它不包含任何子元素或文本,因此它是一个空元素,您可以将它表示为
(以一个空格和熟悉的终止斜杠结束)。
嵌套元素
嵌套 即把某个元素放到其他元素的内部。这些新的元素称为子 元素,包含它们的元素称为父 元素。






