- 浏览: 71645 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
jinbo0120:
受教了,我还一直存在疑问呢,原来是1.5开始使用的...看来我 ...
5.0for循环 -
persistC:
1、到底在哪用cascade=&q ...
hibernate.hbm.xml总结 -
duanyong:
看到xml就烦。不知道为什么。嘿嘿。
hibernate.hbm.xml总结
通过前面两章的介绍,我们已经对XSLT的基本概念和它的转换过程有了一些了解。下面我们一起来学习XSLT的具体语法。说到语法总是比较枯燥的,您可以大体上浏览一遍,等您真正需要使用XSLT的时候,再仔细研究它们。
3.XSLT的元素语法
3.1 xsl:template和xsl:apply-templates
3.2 xsl:value-of
3.3 xsl:for-each
3.4 xsl:if
3.5 Xxsl:choose, when, otherwise
3.6 xsl:sort
3.1 xsl:template和xsl:apply-templates
模板(template)是XSLT中最重要的概念之一。XSLT文件就是由一个一个的模板组成,任何一个XSLT文件至少包含一个模板。模板的概念就象是搭积木;你如果是程序员,也可以将模板看作一个方法,一个类,或者一个模块。它们可以被拼装组合,也可以单独成块,不同的模板控制不同的输出格式。
模板(template)由两部分组成:匹配模式(match pattern)和执行。简单的讲模式定义XML源文档中哪一个节点将被模板处理,执行则定义输出的是什么格式。两部分对应的语法为xsl:template和xsl:apply-templates。
xsl:template的语法是:
<xsl:template
match = pattern
name = qname
priority = number
mode = qname>
<!-- 执行内容 -->
</xsl:template>
xsl:template的作用是定义一个新模板。属性中name,priority,和mode用来区别匹配同一节点的不同模板。它们不是常用的属性。match属性则控制模板的匹配模式(pattern),匹配模式是用来定位XML源文档中哪一个节点被模板处理。一个模板匹配一个节点。我们用一个例子来帮助理解:
假设我们要处理一个包含章节和段落文档。我们用para元素定义段落,用chapter元素定义章节。我们来看看match属性可能的值。下面的语句写法说明模板匹配所有的para元素
<xsl:template match="para">
</xsl:template>
下面的语句写法说明模板匹配所有的para元素和所有的chapter元素:
<xsl:template match="(chapter|para)">
</xsl:template>
下面的语句写法说明模板匹配所有的父节点为chapter元素的para元素:
<xsl:template match="chapter//para">
</xsl:template>
下面的语句写法说明模板匹配根节点:
<xsl:template match="/">
</xsl:template>
我们再来看apply-templates语法:
<xsl:apply-templates
select = node set-expression
mode = qname>
</xsl:apply-templates>
xsl:apply-templates用来执行那一个节点被模板具体处理。你可以将它理解为程序中调用子函数。select属性用来定义确切的节点名称。xsl:apply-templates总是包含在xsl:template元素中,象这样:
<xsl:template match="/">
<xsl:apply-templates select="para"/>
</xsl:template>
这段代码说明摸板匹配整个文档(根节点),具体执行时处理根节点下所有para元素。
<xsl:template match="para">
<p><xsl:apply-templates/></p>
</xsl:template>
而这一段代码则表示摸板匹配para节点,所有para下的子元素都将被处理。
3.2 xsl:value-of
XSL:value-of用来将源文档中元素的文本值写到输出文档中。例如:
有一个个人资料的XML文档:
<?xml version="1.0" encoding="iso-8859-1"?>
<PERSON>
<name>ajie</name>
<age>28</age>
</PERSON>
我如果想在输出文档中显示上面这个XML源文档中的name元素的值,可以这样写XSLT代码:
<xsl:template match="PERSON">
<xsl:value-of select="name"/>
</xsl:template>
执行后,你会看到"ajie"被单独显示出来。其中match="PERSON"定义摸板匹配PERSON节点,xsl:value-of
语法说明需要输出一个节点的值,而select="name"则定义需要被输出的元素为name。看这个过程是不是和数据库里查询一个人的名字很象?当然,xsl:value-of查询还有更多,更复杂的语法,因为是涉及寻找和定位的功能,我们会放在后面的XPath语法中在仔细讲解。
同样功能的还有xsl:copy-of,用法一样,就不重复解释了。
3.3 xsl:for-each
xsl:for-each语法允许你循环处理被选择的节点。例如:有一个含多个个人资料的XML文档:
<?xml version="1.0" encoding="iso-8859-1"?>
<PEOPLE>
<PERSON>
<name>ajie</name>
<age>28</age>
</PERSON>
<PERSON>
<name>tom</name>
<age>24</age>
</PERSON>
<PERSON>
<name>miake</name>
<age>30</age>
</PERSON>
</PEOPLE>
我需要显示所有人的姓名,则可以将XSLT代码写成:
<xsl:template match="PEOPLE">
<xsl:for-each select="child::PERSON">
<xsl:value-of select="name"/>
</ xsl:for-each>
</xsl:template>
3.4 xsl:if
xsl:if类似普通程序语言的if条件语句,允许设定节点满足某个条件时,被模板处理。xsl:if的语法格式为:
<xsl:if test=布尔表达式>
template body
</xsl:if>
例如:
<xsl:template match="PEOPLE">
<xsl:if test="@name">
<p><xsl:value-of select="@name"/></p>
</xsl:if>
</xsl:template>
这段代码的意思是检测PEOPLE节点下所有的元素,如果发现有<name>元素,则将<name>元素的值输出。其中@符号是统配符,表示节点下所有的元素。
3.5 xsl:choose, xsl:when 和 xsl:otherwise
xsl:if语法没有else的属性。如果我们要进行多项选择,那么就要使用xsl:choose / xsl:when / xsl:otherwise系列流程控制语法了。具体的使用请看下面的XSL文件例子:
<xsl:template match="PEOPLE">
<xsl:choose>
<xsl:when test="@name = 'ajie'">
<B><xsl:value-of select="@name"/></B>
</xsl:when>
<xsl:when test="@name">
<I><xsl:value-of select="@name"/></I>
</xsl:when>
<xsl:otherwise>
No name available
</xsl:otherwise>
<xsl:choose>
</xsl:template>
说明:首先在PEOPLE节点下寻找<name>属性值为ajie的元素,如果找到,将ajie用粗体输出;如果没有发现值为ajie 的<name>元素,则将所有的<name>元素的值都用斜体输出;如果没有发现任何<name>元素,则显示"No
name available"。
3.6 xsl:sort
在XSLT中可以对XML源文档的元素进行重新排序,排序的语法就是xsl:sort。举例:下面的代码就是将文档元素按name排序。
<xsl:template match="PEOPLE">
<xsl:apply-templates select="PERSON">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
以上是XSLT的元素的主要语法,还有很多其他的语法,例如:import, include, element, attribute, number, param等等语法,在这里就不一一解释。我们的目的是让您对XSLT的语法有基本的概念,理解XSLT作为一种转换语言的强大功能。
3.XSLT的元素语法
3.1 xsl:template和xsl:apply-templates
3.2 xsl:value-of
3.3 xsl:for-each
3.4 xsl:if
3.5 Xxsl:choose, when, otherwise
3.6 xsl:sort
3.1 xsl:template和xsl:apply-templates
模板(template)是XSLT中最重要的概念之一。XSLT文件就是由一个一个的模板组成,任何一个XSLT文件至少包含一个模板。模板的概念就象是搭积木;你如果是程序员,也可以将模板看作一个方法,一个类,或者一个模块。它们可以被拼装组合,也可以单独成块,不同的模板控制不同的输出格式。
模板(template)由两部分组成:匹配模式(match pattern)和执行。简单的讲模式定义XML源文档中哪一个节点将被模板处理,执行则定义输出的是什么格式。两部分对应的语法为xsl:template和xsl:apply-templates。
xsl:template的语法是:
<xsl:template
match = pattern
name = qname
priority = number
mode = qname>
<!-- 执行内容 -->
</xsl:template>
xsl:template的作用是定义一个新模板。属性中name,priority,和mode用来区别匹配同一节点的不同模板。它们不是常用的属性。match属性则控制模板的匹配模式(pattern),匹配模式是用来定位XML源文档中哪一个节点被模板处理。一个模板匹配一个节点。我们用一个例子来帮助理解:
假设我们要处理一个包含章节和段落文档。我们用para元素定义段落,用chapter元素定义章节。我们来看看match属性可能的值。下面的语句写法说明模板匹配所有的para元素
<xsl:template match="para">
</xsl:template>
下面的语句写法说明模板匹配所有的para元素和所有的chapter元素:
<xsl:template match="(chapter|para)">
</xsl:template>
下面的语句写法说明模板匹配所有的父节点为chapter元素的para元素:
<xsl:template match="chapter//para">
</xsl:template>
下面的语句写法说明模板匹配根节点:
<xsl:template match="/">
</xsl:template>
我们再来看apply-templates语法:
<xsl:apply-templates
select = node set-expression
mode = qname>
</xsl:apply-templates>
xsl:apply-templates用来执行那一个节点被模板具体处理。你可以将它理解为程序中调用子函数。select属性用来定义确切的节点名称。xsl:apply-templates总是包含在xsl:template元素中,象这样:
<xsl:template match="/">
<xsl:apply-templates select="para"/>
</xsl:template>
这段代码说明摸板匹配整个文档(根节点),具体执行时处理根节点下所有para元素。
<xsl:template match="para">
<p><xsl:apply-templates/></p>
</xsl:template>
而这一段代码则表示摸板匹配para节点,所有para下的子元素都将被处理。
3.2 xsl:value-of
XSL:value-of用来将源文档中元素的文本值写到输出文档中。例如:
有一个个人资料的XML文档:
<?xml version="1.0" encoding="iso-8859-1"?>
<PERSON>
<name>ajie</name>
<age>28</age>
</PERSON>
我如果想在输出文档中显示上面这个XML源文档中的name元素的值,可以这样写XSLT代码:
<xsl:template match="PERSON">
<xsl:value-of select="name"/>
</xsl:template>
执行后,你会看到"ajie"被单独显示出来。其中match="PERSON"定义摸板匹配PERSON节点,xsl:value-of
语法说明需要输出一个节点的值,而select="name"则定义需要被输出的元素为name。看这个过程是不是和数据库里查询一个人的名字很象?当然,xsl:value-of查询还有更多,更复杂的语法,因为是涉及寻找和定位的功能,我们会放在后面的XPath语法中在仔细讲解。
同样功能的还有xsl:copy-of,用法一样,就不重复解释了。
3.3 xsl:for-each
xsl:for-each语法允许你循环处理被选择的节点。例如:有一个含多个个人资料的XML文档:
<?xml version="1.0" encoding="iso-8859-1"?>
<PEOPLE>
<PERSON>
<name>ajie</name>
<age>28</age>
</PERSON>
<PERSON>
<name>tom</name>
<age>24</age>
</PERSON>
<PERSON>
<name>miake</name>
<age>30</age>
</PERSON>
</PEOPLE>
我需要显示所有人的姓名,则可以将XSLT代码写成:
<xsl:template match="PEOPLE">
<xsl:for-each select="child::PERSON">
<xsl:value-of select="name"/>
</ xsl:for-each>
</xsl:template>
3.4 xsl:if
xsl:if类似普通程序语言的if条件语句,允许设定节点满足某个条件时,被模板处理。xsl:if的语法格式为:
<xsl:if test=布尔表达式>
template body
</xsl:if>
例如:
<xsl:template match="PEOPLE">
<xsl:if test="@name">
<p><xsl:value-of select="@name"/></p>
</xsl:if>
</xsl:template>
这段代码的意思是检测PEOPLE节点下所有的元素,如果发现有<name>元素,则将<name>元素的值输出。其中@符号是统配符,表示节点下所有的元素。
3.5 xsl:choose, xsl:when 和 xsl:otherwise
xsl:if语法没有else的属性。如果我们要进行多项选择,那么就要使用xsl:choose / xsl:when / xsl:otherwise系列流程控制语法了。具体的使用请看下面的XSL文件例子:
<xsl:template match="PEOPLE">
<xsl:choose>
<xsl:when test="@name = 'ajie'">
<B><xsl:value-of select="@name"/></B>
</xsl:when>
<xsl:when test="@name">
<I><xsl:value-of select="@name"/></I>
</xsl:when>
<xsl:otherwise>
No name available
</xsl:otherwise>
<xsl:choose>
</xsl:template>
说明:首先在PEOPLE节点下寻找<name>属性值为ajie的元素,如果找到,将ajie用粗体输出;如果没有发现值为ajie 的<name>元素,则将所有的<name>元素的值都用斜体输出;如果没有发现任何<name>元素,则显示"No
name available"。
3.6 xsl:sort
在XSLT中可以对XML源文档的元素进行重新排序,排序的语法就是xsl:sort。举例:下面的代码就是将文档元素按name排序。
<xsl:template match="PEOPLE">
<xsl:apply-templates select="PERSON">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
以上是XSLT的元素的主要语法,还有很多其他的语法,例如:import, include, element, attribute, number, param等等语法,在这里就不一一解释。我们的目的是让您对XSLT的语法有基本的概念,理解XSLT作为一种转换语言的强大功能。
发表评论
-
XSLT2.0---正则表达式
2009-06-06 16:27 944其实,正则表达式是XPATH2.0定义的,暂且放在XSLT里说 ... -
XSLT2.0----<xsl:analyze-string>
2009-06-06 16:26 896<xsl:analyze-string>是XS ... -
XSLT2.0----<xsl:variable>和<xsl:sequence>
2009-06-06 16:25 2943我们知道,<xsl:variable>可以定义变量 ... -
XSLT2.0----XPATH2.0序列
2009-06-06 16:24 928严格说来XPATH2.0和XSLT2.0并无直接联系,但是XP ... -
XSLT2.0----字符映射
2009-06-06 16:23 649XSLT2.0提供了字符映射功能。 对于特殊字符或特殊字符, ... -
XSLT2.0---临时结果树
2009-06-06 16:23 1003<xsl:variable>可不是新东西了,它 ... -
XSLT2.0---多文件输出
2009-06-06 16:22 941<xsl:result-document>指 ... -
XSLT2.0---分组
2009-06-06 16:20 1202看了些关于XSLT2.0的东西,先来总结一下分组吧。 &l ... -
xsl2.0正则
2009-06-05 11:46 1014<xsl:analyze-string>是XSLT ... -
XSLT 2.0 的新特性
2009-06-05 11:44 1510XSLT 2.0 的新特性 关键 ... -
XSLT Designer快速入门指南
2008-12-15 21:07 880目录 概述 配 ... -
XSLT document()函数在IE与Firefox中的区别
2008-12-15 21:07 911XSLT 中 document() 函数的作用是用来访问扩展X ... -
了解XSLT
2008-12-15 21:06 927什么是XSLT? XSLT的英文标准名称为eXtensibl ... -
XSL中count()的使用
2008-12-15 21:05 1021XSL中用count()来取得xml中某种节点的个数 list ... -
XSL学习心得-制作图像超链接
2008-12-15 21:04 762这是我今天学习的时候遇到的另一个问题,做图像超链接要把链接地址 ... -
xslt的简单使用[xml-->html]
2008-12-15 21:03 992XSLT命令[xml格式转换] 1.循环 <xsl:f ... -
XSL中利用xsl:for-each时给每一项添加序号
2008-12-15 21:02 1694经常用for-each来循环读取XML中的某个节点集,但常常需 ... -
第四章:XPath的语法
2008-12-15 21:00 9484.XPath的语法 我们在前 ... -
第二章:XSLT的实例
2008-12-15 20:59 9762. XSLT的实例 2.1 XSLT如何转换XML 2.2 ... -
第一章:XSLT的概念
2008-12-15 20:58 7731.XSLT的概念 1.1 什么是XSLT 1.2 为什么要 ...
相关推荐
12.8.2 jsp文档中的元素语法 404 12.9 小结 407 第13章 jsp与javabean 409 13.1 javabean简介 409 13.1.1 属性的命名 409 13.1.2 属性的类型 411 13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 ...
全书一共被压缩为5个rar,这是第三个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...
12.8.2 jsp文档中的元素语法 404 12.9 小结 407 第13章 jsp与javabean 409 13.1 javabean简介 409 13.1.1 属性的命名 409 13.1.2 属性的类型 411 13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 ...
12.8.2 jsp文档中的元素语法 404 12.9 小结 407 第13章 jsp与javabean 409 13.1 javabean简介 409 13.1.1 属性的命名 409 13.1.2 属性的类型 411 13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 ...
第3章 XML名称空间 第Ⅱ部分 验证 第4章 文档类型定义 第5章 XML Schema 第6章 RELAX NG 第Ⅲ部分 处理过程 第7章 XPath 第8章 XSLT 第Ⅳ部分 数据库 第9章 XML查询语言——XQuery 第10章 XML与数据库 第Ⅴ部分 程序...
第3章 表达式:XQuery的组成部分 3.1 表达式种类 3.2 关键字和名称 3.3 查询中的空白符 3.4 字面值 3.5 变量 3.6 函数调用 3.7 注释 3.8 计算顺序和括号 3.9 比较表达式 3.10 条件(ifIthen-else...
第3章 文档类型定义 3.1 为何需要正式的结构 3.1.1 文档域 3.1.2 验证文档的有效性 3.2 编写DTD:通用原则 3.2.1 将DTD与XML文档相关联 3.2.2 基本标记声明 3.3 正式的DTD结构 3.3.1 实体 3.3.2 元素 ...
第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的初始化 3.2.2 访问数组的内容 3.2.3 使用循环访问数组 3.3 使用不同索引的数组 3.3.1 初始化相关数组 3.3.2 访问数组元素 3.3.3 使用循环语句 ...
第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的初始化 3.2.2 访问数组的内容 3.2.3 使用循环访问数组 3.3 使用不同索引的数组 3.3.1 初始化相关数组 3.3.2 访问数组元素 3.3.3 使用...
第3章 文档类型定义 3.1 为何需要正式的结构 3.1.1 文档域 3.1.2 验证文档的有效性 3.2 编写DTD:通用原则 3.2.1 将DTD与XML文档相关联 3.2.2 基本标记声明 3.3 正式的DTD结构 3.3.1 实体 3.3.2 元素 ...
第3章 JavaScript内置对象 3.1 JavaScript对象概述 3.1.1 对象的概念 3.1.2 使用JavaScript对象基础知识 3.2 Array对象 3.2.1 创建Array对象 3.2.2 Array对象属性 3.2.3 Array对象方法 3.3 String对象 ...
第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的初始化 3.2.2 访问数组的内容 3.2.3 使用循环访问数组 3.3 使用不同索引的数组 3.3.1 初始化相关数组 3.3.2 访问数组元素 3.3.3 使用...
语法:<!ATTLIST 对应的元素名 属性名 属性取值类型 属性默认值> 属性取值类型 1、CDATA:可析字符(文本) 2、Enumerated:枚举类型,由“|”分隔的可能的属性值列表 属性默认值: 注意 1、#REQUIRED:必须提供...
好了,通过第三章的学习,我们已经了解了一些XML和DTD的基本术语,但是我们还不知道怎样来写这些文件,需要遵循什么样的语法,在下一章,将重点介绍有关撰写XML和DTD文档的语法。 第四章 XML语法 七.DTD的语法...
第3章 JavaScript内置对象 43 3.1 JavaScript对象概述 43 3.1.1 对象的概念 43 3.1.2 使用JavaScript对象 基础知识 44 3.2 Array对象 46 3.2.1 创建Array对象 46 3.2.2 Array对象属性 47 3.2.3 Array对象方法 48 3.3...
第3章 文档类型定义 3.1 为何需要正式的结构 3.1.1 文档域 3.1.2 验证文档的有效性 3.2 编写DTD:通用原则 3.2.1 将DTD与XML文档相关联 3.2.2 基本标记声明 3.3 正式的DTD结构 3.3.1 实体 3.3.2 元素 ...
第3章 文档类型定义 3.1 为何需要正式的结构 3.1.1 文档域 3.1.2 验证文档的有效性 3.2 编写DTD:通用原则 3.2.1 将DTD与XML文档相关联 3.2.2 基本标记声明 3.3 正式的DTD结构 3.3.1 实体 3.3.2 元素 ...
第3章(\c03) 示例描述:学习JavaScript的高级语法。 3.1.html 连接字符串。 3.2.html indexOf()函数与lastIndexOf()函数。 3.3.html 截取字符串的子串。 3.4.html 用户自定义的实现slice函数功能...
第3章 文档类型定义 51 3.1 为何需要正式的结构 51 3.1.1 文档域 52 3.1.2 验证文档的有效性 52 3.2 编写DTD:通用原则 52 3.2.1 将DTD与XML文档相关联 53 3.2.2 基本标记声明 55 3.3 正式的DTD结构 55 3.3.1 实体 ...
17 2.1 构建开发环境 17 2.1.1 安装JDK 17 2.1.2 安装Tomcat 21 2.1.3 安装Eclipse 23 2.2 配置开发环境 23 2.3 小结 26 第3章 Java的反射机制 27 3.1 Java反射API 27 3.2 加载类的实例 29 3.2.1 加载class对象的两...