• 沒有找到結果。

(1)准备借阅书籍介绍页面的内容。在制作 XML 文档之前,需明确文档要包含的数据 内容,才能进一步规划或设计 XML 文档等。该页面包含的内容如下:

借阅书籍介绍

书名: Ajax 基础教程

作者: (美)阿斯利森·舒塔

出版社: 人民邮电出版社

出版时间: 2006 年 02 月

ISBN: ISBN:7-115-14481-8/TP·5211

定价: 35.00 元

内容简介:

Ajax 技术可以提供高度交互的 Web 应用,给予用户更丰富的页面浏览体验。本书 重点介绍 Ajax 及相关的工具和技术,主要内容包括 XMLHttpRequest 对象及其属 性和方法、发送请求和处理响应、构建完备的 Ajax 开发工具、使用 JsUnit 测试 JavaScript、分析 JavaScript 调试工具和技术,以及 Ajax 开发模式和框架等。本书 中所有例子的代码都可以从 Apress 网站本书主页的源代码(Source Code)免费得 到。本书适合各层次 Web 应用开发人员和网页设计人员阅读

精彩导读: 书籍介绍页面的 XML 源文档,以“Book4-3.xml”文件名保存。

<?xml version="1.0" encoding="gb2312"?>

<Book>

<abstract> Ajax 技术可以提供高度交互的 Web 应用,给予用户更丰富的页面浏览体验。本书重点 介绍 Ajax 及相关的工具和技术,主要内容包括 XMLHttpRequest 对象及其属性和方法、发送请求和处理 响应、构建完备的 Ajax 开发工具、使用 JsUnit 测试 JavaScript、分析 JavaScript 调试工具和技术,以及 Ajax 开发模式和框架等。本书中所有例子的代码都可以从 Apress 网站本书主页的源代码(Source Code)

免费得到。本书适合各层次 Web 应用开发人员和网页设计人员阅读。

</abstract>

<comment> 几年前开始构建 Web 应用时,我们感觉这简直就是软件开发的“圣杯”。以前,我

们一直开发的都是胖客户应用,公司每次发布这种公司应用的新版本时,总是需要将这种应用部署到分 散在全国各地的数百个用户那里去,让我们沮丧的是,这种复杂的安装过程不仅冗长而且很容易出错,

不仅让开发人员很头疼,用户也非常不满。通过浏览器来部署应用,这看上去相当不错,因为这样,就 不再需要在客户端上安装软件了。所以,与许多其他公司一样,我们公司也很快转型,开始在 Web 上部 署应用。 尽管部署起来相对容易,但 Web 应用也有自己的问题。在用户看来,最突出的问题是用户界 面没有了以往丰富的交互性。Web 应用仅限于使用 HTML 提供的一组基本部件,而这是很有限的。更 糟糕的是,与服务器交互需要完全刷新页面,很多用户已经熟悉了功能强大的客户—服务器应用,对他 们来说,这一点很让人不快。我们曾经一直认为,在 Web 应用中只要刷新页面就必须完全刷新,好像这 是在所难免的,所以往往想方设法地避免页面刷新。我们甚至还考虑过编写一个 Java applet,由它处理 浏览器和服务器之间的通信。不过,随着越来越多 Web 应用的部署,我们很快发现,用户已经习惯了这 种完全页面刷新的方式,这么一来,我们也不再那么强烈地想要另辟蹊径了。……

</comment>

</Book>

(3)用 IE 浏览“Book4-3.xml”文件,结果如图 4-11 所示。

图 4-11 “Book4-3.xml”文件的浏览效果

(4)编写借阅书籍介绍页面的 XSL 样式表,编写的代码如下,并以“Book4-3.xsl”为文 件名进行保存。

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>借阅书籍介绍</title>

</head>

<body>

<h2 align="center"><strong>借阅书籍介绍</strong></h2>

<table border="1" align="center">

<tr>

</td>

</tr>

<tr>

<td >内容简介:</td>

<td>

<xsl:value-of select="Book/abstract"/>

</td>

</tr>

<tr>

<td >精彩导读:</td>

<td>

<xsl:value-of select="Book/comment"/>

</td>

</tr>

<tr>

<td >本书目录:</td>

<td>…… </td>

</tr>

</table>

</body>

</html>

</xsl:template>

</xsl:stylesheet>

(5)在 XML 文件中添加 XSL 样式表链接。在“Book4-3.xml”的第二行添加如下代码:

<?xml-stylesheet type="text/xsl" href="Book4-3.xsl" ?>

保存后用 IE 浏览得到如图 4-10 所示的最终效果。

四、知识要点分解

(一)匹配节点的模式

xsl:template 元素的 match 特性支持复杂的语法,允许人们精确地表达想要或不想要与哪 个节点匹配。xsl:apply-templates、xsl:value-of、xsl:for-each、xsl:copy-of 和 xsl:sort 的 select 属 性支持功能更加强大的语法的超集,允许人们精确地表达想要或不想要选择哪个节点。下面讨 论匹配和选择节点的各种模式。

1.匹配根节点

为了使输出的文档结构整洁。从 XSL 变换的第一个输出内容应为输出文档的根元素。因 此,XSL 样式单一般以应用于根节点的规则开始。要在规则中指定根节点,可将其 match 属 性设置为合适的值。例如:

<xsl:template match="/">

<html>

<xsl:apply-templates/>

</html>

</xsl:template>

此规则应用于根节点,并且只应用于输入树形结构的根节点。当读取到此根节点时,就 输出<html>标记,处理根节点的子节点,然后输出</html>标记。本规则推翻了根节点的缺省 规则。清单 4-5 显示了应用于根节点的带有单一规则的样式单。

清单 4-5 用于根节点的带有单一规则的 XSL 样式单

<?xml version="1.0"?>

<xsl:stylesheet

xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">

<xsl:template match="/">

<html>

<head>

<title>Atomic Number vs. Atomic Weight</title>

</head>

<body>

<table>

Atom data will go here

</table>

</body>

</html >

</xsl:template>

</xsl:stylesheet>

由于本样式单只为根节点提供一条规则,并且由于规则的模板未指明对子节点进行进一 步的处理,因而只是按原样输出,所以在模板中所看到的所有内容都将插入到结果文档中。换 句话说,将清单 4-5 中的样式单应用于清单 4-1(或其他任何结构整洁的 XML 文档)中,所 获得的结果如下:

<html><head><title>Atomic Number vs. Atomic Weight</title></head><body><table>

Atom data will go here

</table></body></html>

2.匹配元素名

正如前面介绍的那样,最基本的模式只包含一个元素名,用来匹配所有带有该名的元素。

例如,下面的模板与“ATOM”元素相匹配,并将“ATOM”元素的“ATOMIC_NUMBER”

子元素标成粗体。

<xsl:template match="ATOM">

<b><xsl:value-of select="ATOMIC_NUMBER"/><b>

</xsl:template>

清单 4-6 显示的是扩充了清单 4-5 的样式单。首先,在根节点的规则模板中包括了 xsl:apply-templates 元素。此规则使用 select 属性来确保只有“PERIODIC_TABLE”元素获得 处理。

其次,使用 match=“PERIODIC_TABLE”语句创建了只适用于“PERIODIC_TABLE”元 素的规则。本规则设置周期表(PERIODIC_TABLE)的标题,然后应用模板来从“ATOM”

元素中生成周期表(PERIODIC_TABLE)的主体。

最后,“ATOM”使用<xsl:apply-templates select="NAME"/>、<xsl:apply-templates select=

"ATOMIC_NUMBER"/>和<xsl:apply templates select="ATOMIC_WEIGHT"/>规则,明确地选择

“ATOM”元素的“NAME”、“ATOMIC_NUMBER”和“ATOMIC_WEIGHT”子元素。它 们都包装在 HTML 的 tr 和 td 元素中,以便最终的结果是与原子量(ATOMIC_NUMBER)

相匹配的原子(ATOM)序数表。图 4-12 显示将清单 4-6 中的样式单应用于清单 4-1 的输 出结果。

对本样式单需要注意的是:输入文档中的 NAME、ATOMIC_NUMBER 和 ATOMIC_

WEIGHT 元素的精确顺序是不重要的。它们在输出文档中以选择它们的顺序出现,也就是说 首先为原子序数,然后是原子量。相反,在输入文档中,各个原子依字母顺序排序。以后,将 会看到如何使用 xsl:sort 元素来改变这个顺序,以便使用更常规的原子序数的顺序来排列原子。

清单 4-6 select 用于元素的特定类的模板

<?xml version="1.0"?>

<xsl:stylesheet

xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">

<xsl:template match="/">

<html>

<head>

<title>Atomic Number vs. Atomic Weight</title>

</head>

<body>

<xsl:apply-templates select="PERIODIC_TABLE"/>

</body>

</html>

</xsl:template>

<xsl:template match="PERIODIC_TABLE">

<hl>Atomic Number vs. Atomic Weight</hl>

<table>

<th>Element</th>

<th>Atomic Number</th>

<th>Atomic Weight</th>

<xsl:apply-templates select="ATOM"/>

</table>

</xsl:template>

<xsl:template match="ATOM">

<tr>

<td><xsl:value-of select="NAME"/></td>

<td><xsl:value-of select="ATOMIC_NUMBER"/></td>

<td><xsl:value-of select="ATOMIC_WEIGHT"/></td>

</tr>

</xsl:template>

</xsl:stylesheet>

3.使用“/”符号匹配子节点

在 match 属性中并不局限于当前节点的子节点,可使用“/”符号来匹配指定的元素后代。

当单独使用“/”符号时,它表示引用根节点。但是,在两个名称之间使用此符号时,表示第 二个是第一个的子代。例如,“ATOM/NAME”引用“NAME”元素,“NAME”元素为“ATOM”

元素的子元素。

图 4-12 显示的原子序数与原子量的关系表

在 xsl:template 元素中,这种方法能够用来只与某些给定类型的元素进行匹配。例如,下 面的模板规则将“ATOM”子元素的“SYMBOL”元素标记为“strong”。此规则与非 ATOM 元素的直系子元素的“SYMBOL”元素无关。

<xsl:template match="ATOM/SYMBOL">

<strong><xsl:value-of select="."/></strong>

</xsl:template>

请记住,本规则选择的是作为“ATOM”元素子元素的“SYMBOL”元素,

而不是选择拥有 SYMBOL 子元素的 ATOM 元素。换句话说,在<xsl:value-of select="."/>中的“.”符号引用的是“SYMBOL”,而不是“ATOM”。

将模式写成一行的形式,就可以指定更深层的匹配。例如,PERIODIC_TABLE / ATOM / NAME 选择的是其父为“ATOM”元素(其父为 PERIODIC_TABLE 元素)的 NAME 元素。

还可以使用“*”通配符来代替层次结构中的任意元素名。例如,下面的模板规则应用于

“PERIODIC_TABLE”孙元素的所有 SYMBOL 元素。

<xsl:template match="PERIODIC_TABLE/*/SYMBOL">

<strong><xsl:value-of select="."/></strong>

</xsl:template>

最后一点,就如上面所看到的那样,单独使用“/”本身,表示选择文档的根节点。例如,

下面的规则应用于文档根元素的所有“PERIODIC_TABLE”元素。

<xsl:template match="/PERIODIC_TABLE">

<html><xsl:apply templates/></html>

</xsl:template>

虽然“/”引用根节点,但“/*”则引用任意根元素。例如,

<xsl:template match="/*">

<html>

<head>

<title>Atomic Number vs. Atomic Weight</title>

</head>

<body>

<xsl:apply-templates/>

</body>

</html>

</xsl:template>

4.使用“//”符号匹配子代

有时候,尤其是使用不规则的层次时,更容易的方法就是越过中间节点,只选择给定类

有时候,尤其是使用不规则的层次时,更容易的方法就是越过中间节点,只选择给定类

相關文件