选择显示字体大小

xslt轻松入门第三章:xslt的元素语法

     通过前面两章的介绍,我们已经对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="(chapterpara)">
  </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作为一种转换语言的强大功能。
  
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons