value-ofselect="模式"/>
如果要取得多个元素,则要使用xsl:
for-each元素,格式如下:
for-eachselect="模式">
…..
for-each>
接下来,我们要在flowers.xml文件中使用这个xsl文件,即在flowers.xml文件中的XML声明下面加入以下语句:
xml:
stylesheettype="text/xsl"href="flowers.xsl"?
>
完整的程序代码如下:
ex4_4_01.xml:
利用XSL 显示XML文件
xmlversion="1.0"encoding="gb2312"?
>
xml:
stylesheettype="text/xsl"href="flowers.xsl"?
>
shop1
iris
$4.00
shop2
iris
$4.30
shop3
iris
$3.50
XML 是可扩展标记语言(ExtensibleMarkupLanguage)的缩写,其中的 标记(markup)是关键部分。
您可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。
您创建的文件,或文档实例 由元素(标记)和内容构成。
当从打印输出读取或以电子形式处理文档时,元素能够帮助更好地理解文档。
元素的描述性越强,文档各部分越容易识别。
自从出现标记至今,带有标记的内容就有一个优势,即在计算机系统缺失时,仍然可以通过标记理解打印出来数据。
标记语言从早期的私有公司和政府制定形式逐渐演变成标准通用标记语言(StandardGeneralizedMarkupLanguage,SGML)、超文本标记语言(HypertextMarkupLanguage,HTML),并且最终演变成XML。
SGML比较复杂,HTML(实际上仅是一组元素集)在识别信息方面不够强大。
XML则是一种易于使用和易于扩展的标记语言。
您可以使用XML创建自己的元素,从而能够更精确地表示自己的信息。
您可以在文档内部识别每个部分,而不是将文档看作仅由标题和段落组成。
为了提高效率,您可能需要定义数量一定的元素,并统一使用它们。
(您可以在文档类型定义(DocumentTypeDefinition,DTD)或模式(schema)中定义元素,稍后我将对此进行简要的描述)。
一旦习惯使用XML之后,就可以在构建文件时尝试处理元素名称。
构建XML
如前所述,XML文件由内容和标记组成。
您通过以标记包围内容的方式将大部分内容包含在元素中。
例如,假设您需要创建一本XML烹饪书。
您需要用XML编写名为 IceCreamSundae 的食谱。
为了标记食谱名,您需要将这个文本包含到元素中,即分别在文本的首末两端添加开始和结束标记。
可以将元素命名为 recipename。
要标记元素的开始标记,像这样将元素名放到尖括号中(<>):
。
然后输入文本IceCreamSundae。
在文本的后面输入结束标记,即将元素名放在尖括号内,然后在元素名前面加上一个终止斜杠(/),比如:
。
这些标记构成一个元素,您可以在元素的内部添加内容或其他元素。
您可以为某个文档或文档集创建元素名。
可以创建规则让元素根据您的特定需求组合起来。
元素名可以是比较具有针对性的,也可以是比较通用的。
您还可以创建决定添加何种元素的规则。
这些规则可以是严格的,也可以是松散的,这完全由您决定。
一定要为文档创建元素,以识别您认为重要的部分。
开始创建XML文件
XML文档的第一行可以是一个XML声明。
这是文件的可选部分,它将文件识别为XML文件,有助于工具和人类识别XML(不会误认为是SGML或其他标记)。
可以将这个声明简单地写成
xml?
>,或包含XML版本(
xmlversion="1.0"?
>),甚至包含字符编码,比如针对Unicode的
xmlversion="1.0"encoding="utf-8"?
>。
因为这个声明必须出现在文件的开头,所以如果打算将多个小的XML文件合并为一个大XML文件,则可以忽略这个可选信息。
创建根元素
根元素的开始和结束标记用于包围XML文档的内容。
一个文件只能有一个根元素,并且需要使用“包装器”包含它。
清单1 显示了经过删节的示例,其中的根元素名为 。
(参见 下载 小节获得完整的XML文件)。
清单1.根元素
1
2
3
xmlversion="1.0"encoding="UTF-8"?
>
在构建文档时,内容和其他标记必须放在 和 之间。
命名元素
标记的大小写保持一致
创建XML时,要确保开始和结束标记的大小写是一致的。
如果大小写不一致,在使用或查看XML时将出现错误。
例如,如果大小写不一致,InternetExplorer将不能显示文件的内容,但它会显示开始和结束标记不一致的消息。
到目前为止,都使用 作为根元素。
在XML中,先要为元素选择名称,然后再根据这些名称定义相应的DTD或schema。
创建名称时可以使用英文字母、数字和特殊字符,比如下划线(_)。
下面给出命名时需要注意的地方:
∙元素名中不能出现空格。
∙名称只能以英文字母开始,不能是数字或符号。
(在第一个字母之后就可以使用字母、数字或规定的符号,或它们的混合)。
∙对大小写没有限制,但前后要保持一致,以免造成混乱。
我们继续以前面的示例为例,如果添加了名为 的元素,它将有一个开始标记 和相应的结束标记 。
清单2.更多元素
1
2
3
4
5
xmlversion="1.0"encoding="UTF-8"?
>
IceCreamSundae
5minutes
XML文档可以使用内部不包含任何内容的空标记,这些标记可以表示为单个标记,而不是一组开始和结束标记。
以类似于HTML的文件为例,里面的 是一个独立的元素。
它不包含任何子元素或文本,因此它是一个空元素,您可以将它表示为 (以一个空格和熟悉的终止斜杠结束)。
嵌套元素
嵌套 即把某个元素放到其他元素的内部。
这些新的元素称为子 元素,包含它们的元素称为父 元素。
根元素中嵌套有几个其他元素,如 清单3 所示。
这些嵌套的子元素包括 、 和 。
元素内部包含多个子元素 。
XML文档可以使用多层嵌套。
一个常见的语法错误是父元素和子元素的错误嵌套。
任何子元素都要完全包含在其父元素的开始和结束标记内部。
每个同胞(Sibling)元素必须在下一个同胞元素开始之前结束。
清单3 的代码显示了正确的嵌套。
这些标记的开始和结束没有与其他标记混合 在一起。
清单3.正确嵌套的XML元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
xmlversion="1.0"encoding="UTF-8"?
>
IceCreamSundae
3
chocolatesyruporchocolatefudge
1
nuts
1
cherry
5minutes
添加属性
有时候要为元素添加属性。
属性由一个名称-值对构成,值包含在双引号中("),比如:
type="dessert"。
属性是在使用元素时存储额外信息的一种方式。
在同一个文档中,可以根据需要对每个元素的不同实例采用不同的属性值。
您可以在元素的开始标记内部输入一个或多个属性,比如:
。
如果要添加多个属性,各个属性之间使用空格分开,比如:
。
清单4 显示了当前的XML文件。
清单4.带有元素和属性的XML文件
1
2
3
4
5
xmlversion="1.0"encoding="UTF-8"?
>
IceCreamSundae
5minutes
您可以根据需要使用任意数量的属性。
要考虑需要添加到文档的细节。
如果要对文档分类,属性尤其有用,比如按照菜谱的 type 进行分类。
属性名可以包含在元素名中使用的字符,规则也是类似的,即字符之间不能带有空格,名称只能以字母开始。
构造良好并且有效的XML
如果您根据结构规则创建XML,就很容易实现构造良好的XML。
构造良好的XML 即遵循所有XML规则创建的XML:
正确的元素命名,嵌套,属性命名等等。
要实现构造良好的XML取决于如何处理XML。
但考虑一下前面提到的示例,它要求根据菜谱类型进行分类。
您需要确保每个 元素都包含 type 属性,以对菜谱进行分类。
能够正确验证并确保存在属性值是非常重要的(避免出现双关语)。
验证 就是根据元素规则检查文档的结构,以及如何为每个父元素定义子元素。
这些规则是在 文档类型定义(DocumentTypeDefinition,DTD)或模式(schema)中定义的。
验证要求您创建自己的DTD或schema,然后在XML文件中引用DTD或schema文件。
为了实现验证,必须在XML文档的顶部附近包含文档类型(DOCTYPE)。
这行代码将引用用于验证文档的DTD或schema(元素和规则列表)。
例如,DOCTYPE 可能类似于 清单5。
清单5.DOCTYPE
1
DOCTYPEMyDocsSYSTEM"filename.dtd">
这个例子假设元素列表文件的名称是 filename.dtd,并且位于您的计算机上(如果指向公共文件位置,则 SYSTEM 和 PUBLIC 是相对的)。
使用实体
实体 可以是文本短语或特殊字符。
它们可以指向内部或外部。
必须正确地声明和表示实体,以避免错误和确保正确显示。
您不能直接在内容中输入特殊字符。
如果要在文本中使用符号,必须使用它的字符代码将它设置为实体。
您可以将短语(比如公司名)设置为实体,然后就可以在内容中使用该实体。
为了设置实体,必须先为它创建一个名称,然后将它输入到内容中,以and符号(&)开始,并以分号(;)结束—例如,&coname;。
然后在 DOCTYPE 的方括号([])内部输入代码,如 清单6 所示。
这个代码识别表示实体的文本。
清单6.ENTITY
1
2
3
DOCTYPEMyDocsSYSTEM"filename.dtd"[
ENTITYconame"RabidTurtle
Industries"
]>
使用实体可以避免反复输入相同的短语和信息。
在很多情况下它还使得调整文本更加容易(变更公司名时),只需对实体定义进行简单调整。
避免错误
在学习创建XML文件时,在XML编辑器中打开它,以检查它的结构是否良好,并且确保您遵循XML规则。
例如,如果您使用Windows®InternetExplorer®,就可以在浏览器中打开XML。
如果它