没有合适的资源?快使用搜索试试~ 我知道了~
跟我学XSL
3星 · 超过75%的资源 需积分: 0 128 下载量 3 浏览量
2007-04-03
18:58:55
上传
评论
收藏 103KB DOC 举报
温馨提示
试读
21页
介绍XSL的一些知识
资源详情
资源评论
资源推荐
跟我学 (一)
第一个 XML 文档
随着 的发展,越来越多的信息进入互联网,信息的交换、检索、保存及再利
用等迫切的需求使 这种最常用的标记语言已越来越捉襟见肘。 将数据内容与
表现融为一体,可修改性、数据可检索性差,而 借鉴了 与数据库、程序语言
的优点,将内容与表现分开,不仅使检索更为方便,更主要的是用户之间数据的交换更加
方便,可重用性更强。
是一种元标记语言,没有许多固定的标记,为 开发人员提供了更大的灵活
性。当我们使用 时,标记只是简单的表示内容的显示形式,而与表示的内容没有任
何关联,为文档的进一步处理带来极大的不便。比如要表示个人简历,用 的表示方
式如下:
!"
姓名禹希初性别男生日#$$%&
'
技能&数据库设计与维护、 开发
(
(
(
在这里,我们无法从标记 、 得知其内容表示什么,如果用 ,相应的文档
(文件名:个人简历.xml)就可写成如下形式:
)*+, -%"- !-./0/-)
1+
+禹希初(+
*男(*
23#$$%&( 23
4 数据库设计与维护、 开发(4
(1+
说明:
, 55规定了 文档的版本,此处只能是 %";
!55此处规定了 文档的编码类型,此处取值为“./0/6,也就是“简
体中文”。
对比两例,使用 我们可以做到自定义标记,用标记表明内容的含义。这样在
上交流资料时,为用计算机处理文档提供了极大的方便,同时我们阅读源文件时
也不会被一大堆格式弄得晕头转向。
然而,由于 并没有为标记规定显示方式,如果我们在游览器中查看以上两个文档
(建议使用 &%" 或更新版本),我们将看到 *+ 文档并没有以诸如表格的方式来显示。
难道我们就不能像 一样显示文档吗?回答是否定的。以个人简历为例,需要另建一
个格式文件说明各个标记的显示方式,其内容如下(假设文件名为 resume.css):
1+7 3849:
+7 3849;< =8/">9:
*7 3849*< 8/+:
237 3849*< 8/+:
4 7 3849*< 8/+:
说明:
以上均为 ? 样式,建议读者参考有关资料熟悉 ?,在以后学习中必须用到,此处
由于篇幅关系不作介绍。建立文件 1+% 后,在个人简历%*+ 文件的第一行后添加
以下文字:
)*+8323-*(-2;-1+%-)
说明:
此处表示引用一个外部 ? 样式文件,其中 type 规定样式类型(可取值为 *(
或 *(*),href 规定文件路径。
保存文件,再以 &%" 打开文件。怎么样?格式有些不一样吧。好象还不令人满意,
文档内容是清晰了,但显示效果比 编写的文档就差得多了, 编写的文档就只能
以这种方式显示吗?!
提示:
%为了更好的理解与掌握 ,建议大家熟悉 @%" 与 ?/%" 语法;掌握
A, 、B 中至少一种;编程经验、对数据库理论与 C 的了解均能使大家
在学习 时获益。
/% 文档中标记必须成对出现,如果是空标记也必须有前加“(6的同名标记结束,
或使用此种文式*+D+4(表示空标记。
0% 以及下周将要介绍的 文档,属性值必须用双引号(-)或单引号(E)括
起来。
@% 文档必须是好结构的( 文档也是 文档中一种),也就是说标记必须
有结束标记、标记可以嵌套但不可交叉,如
1 ( ((1
是合法的,而下面的形式
1 (1(
则是错误的。如果 文档在浏览时出错,多半是违反了上面提到的规则。
跟我学 XSL(二)
XSL 入门
上期我们讲到用 ?(层叠样式表)来格式化 文档,其效果并不很令人满意。
实际上 ? 用来格式化 标记比较合适些,只是因为它简单才在上例中采用。
在更多的时候只是一种数据文件,怎样将它变为我们日常所看到的 格式那
样的文件呢?如果我们将 文件比作结构化的原料的话,那么 就好比“筛子“与“模
子“,筛子选取自己需要的原料,这些原料再通过模子形成最终的产品:。
这个模子大致是这样:我们先设计好表现的页面,再将其中需要从 中获取数据来
填充内容的部分“挖掉“,然后用 语句从 中筛出相关的数据来填充。一言以譬之:
这 实际上就是 的一个“壳子“, 数据利用这个“壳“来生成“传统“的 。
在展开时是一个树形结构,我们将树形结构中自定义标记称为节点,节点之间存
在父子、兄弟关系,我们要访问其中的结点从根结点就要以”/”来层层进入。
在 这个壳中,我们要从原料库?? 里提取相关的数据,就要用到 提供
的模式化查询语言。所谓模式化查询语言,就是通过相关的模式匹配规则表达式从 里
提取数据的特定语句,即我们上所说的“筛子“。
参考微软的” 开发者指南”,我们大致可将模式语言分为三种:
选择模式
*8;<2、*8,1<;F和 *83<+
测试模式
*8 ;和*8G2
匹配模式
< xsl:template >
我们现在就分别对之进行介绍。
一、 选择模式
选择模式语句将数据从 中提取出来,是一种简单获得数据的方法,这几个标记都
有一个 属性,选取 中特定的结点名的数据。
1、< xsl:for-each >
如在 中有这样的数据8
12
+小禹(+
+春华(+
+秋实(+
(12
我们要读取这三个作者名字,是一个一个地按”12(+6方法来读取吗,可有多
个这样的 + 呀?如果有一种程序性的语句来循环读取有多好啊!
想得很对, 提供了这样的具有程序语言性质的语句8;<2
用它读取这三个作者名字的方法如下8
*8;<2612(+6
HH%
%(*8;<2
,顾名思义:选取,它可以选定 中特定唯一的标记,也可以选择某一类相同的
标记,我们称之为结点集。
语法:
*8;<2--<3-< < -
属性:
%
根据 样式查询考察上下文以决定哪类结点集(满足 条件)使用此样式描
述。作为一种简化的表示就是,如果你想对文档中的某一种标记的内容的显示方式进行格
式化,就可以将让 等于此元素的标记名。例如欲对标记 *+D+4 进行格式化,
即可用如下方式表示:
*8;<2-*+D+4-
I<<样式定义<<
(*8;<2
/%<3
以分号(9)分隔、作为排序标准的列表。在列表元素前添加加号(J)表示按此标记
的内容以升序排序,添加减号(<)表示逆序排序。作为一种简化的表示就是,排序标准列
表就是由 规定的标记的子标记的序列,每个标记之间以(9)分隔。
2、< xsl:value-of >
*8;<2模式只是选取节点,并没有取出节点的值,好比猴子只是爬到了树的某
个枝干上,那么就用*8,1<;来摘“胜利果实“吧!
语法:
*8,1<;--提取节点的值
属性:
用来与当前上下文匹配的 式样。简单的讲,如果要在 文档某处插入某个
标记(假定是 *+D+4 标记)的内容,可用如下方式表示:
*8,1<;-*+D+4-(*8,1<;
或
*8,1<;-*+D+4-(
示例:
此处仍以上期的个人简历的作为例子,我们需要对文件(个人简历%*+)作一定修改,
确切的说是将其中的第二行
)*+8323-*(-2;-1+%-)
修改为
)*+8323-*(*-2;-1+%*-)
然后建立一个新文件:1+%*,其内容如下:
)*+, -%"- !-./0/-)
*+8*-28((GGG%G0%!('(<*-
个人简历(
(
*8;<2-1+-
K(
-- !-"-
?KL3-;< =8&">9;<G !28-
个人简历
(?KL
'
姓名(*8,1<;-+-((
性别(*8,1<;-*-((
生日(*8,1<;- 23-((
('
'
技能(-&-*8,1<;-4 -((
('
(
(*8;<2
(
(
完成这些以后再来让我们看一下辛勤劳动的成果,怎么样?效果不错吧。更酷还在后
头呢。现在我们对文件(个人简历%*+)作进一步的修改:
%在标记1+前添加一个新标记1+;
/%将标记对1+(1+之间的内容(包括这一对标记)复制并粘贴在其
后,并在最后用1+结束。
0%以 L%* 打开文件 1+%*,在标记之后添加文字:*8;<
2-1+-;在标记(之前添加文字:(*8;<2
,保存文件。
@%在浏览器中打开文件(个人简历%*+)。看到了什么?两份个人简历!
就这样,利用 我们可以编写内容与样式完成分离的文档!当然, 文件比一
般的 文件要复杂一些,然而一旦完成则可用于格式化所有同类的 文档。
注:如果拷贝代码,请将空格删除
跟我学 XSL(三)
XSL 模板与匹配模式
经过前几日的学习,我们学习了 文档的编写和以及三个 元素,已能编写
相当灵活的 文档,今天将学习的是 模板的编写。我们都知道,短的文档、程序十
分好读,但当规模增大后,其复杂性也以更快的速度增加。
前面我们学了*8;<2、*8,1<;等,可以用它们对 数据实
现简单的格式化输出,但如果遇到比较复杂的 格式输出,将 按照要求依次写下
来的话,一是设计困难,可扩展性差,不利于人员之间的分工协作;另则,可修改性很差,
可能会出现牵一发而动全军的情况,不利于维护。程序中模块化设计逐步细化的方法在这
里得到了应用!
模板将 的设计细化成一个个模板(块),最后再将这些模板(块)组合成一
个完整的 ;好比船与集装箱,我们不是将所有的货物一件件地堆起来,而是装在各自
的集装箱中,然后再在船上将这些集装箱堆放起来。这种方法可以使你先从整体上考虑整
个 的设计,然后将一些表现形式细化成不同的模块,再具体设计这些模块,最后将它
们整合在一起,这样,将宏观与微观结合起来,符合人们条理化、规范化要求。
装集装箱??书写模板(块):< xsl:template >
*8+
语法:
*8++2-<*-!1!-!1!<+-
属性:
+255确定什么样的情况下执行此模板。作为一种简化的说明,在此处使用标记的名
字;其中最上层模板必须将 +2 设为“(6
!1!55确定在此模板中执行什么脚本语言,其取值与 中的 ?'K 标记的
L.M. 属性的取值相同,缺省值是 A
*8+用 +2 属性从 选取满足条件的节点,征对这些特定的节点形
成一个特定输出形式的模板。
吊集装箱上船<??调用模板(块):*83<+
*83<+
语法:
*83<+--<3-< < -
属性:
55确定在此上下文环境中应执行什么模板,即选取用*8+标记建立
的模板(块)。
<355以分号(9)分隔的排序标准,通常是子标记的序列
示例:
以个人简历为例,为便于处理我们希望“技能”中每一项都用标记对4 (4
括起来,有多少项技能就有多少个这种标记对,经过修改后的个人简历 文档内容如下:
)*+, -%"- !-./0/-)
)*+8323-*(*-2;-1+D+%*-)
1+
剩余20页未读,继续阅读
adverse
- 粉丝: 94
- 资源: 127
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1