1 / 43

第5章 XLS

第5章 XLS. 5.1 XSL 简介 5.2 XSL 基本语法 5.3 XSL 节点选择 5.4 XSL 控制指令. 5.1 XLS 简介. XLS: 可扩展样式语言 eXtensible StyleSheet Language。XSL 最近的一个草案于2000年3月提出,仍然有待进一步修改完善。 XSL 特点: 遵守 XML 的语法规则, XSL 本身就是一个 XML 文档,系统可以使用同一个 XML 解释器对 XML 文档及其相关的 XSL 文档进行解释处理。. 5.1 XLS 简介. XSL 组成:

belle
Download Presentation

第5章 XLS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 XLS 5.1 XSL简介 5.2 XSL基本语法 5.3 XSL节点选择 5.4 XSL控制指令

  2. 5.1 XLS简介 • XLS:可扩展样式语言eXtensible StyleSheet Language。XSL最近的一个草案于2000年3月提出,仍然有待进一步修改完善。 • XSL特点:遵守XML的语法规则,XSL本身就是一个XML文档,系统可以使用同一个XML解释器对XML文档及其相关的XSL文档进行解释处理。

  3. 5.1 XLS简介 • XSL组成: • 数据转换语言XSLT(XSL Transformations):描述了如何将一个XML文档进行转换,转换为可浏览或可输出的格式;目前主要转换成HTML文档。 • 数据格式化语言XSL-FO(XSL Formatting Object):定义了格式对象FO(fomatted object),作用类似CSS。但目前争论颇多,成了XSL标准中的老大难问题,所以很少使用。

  4. 5.1 XLS简介 • XSLT作用:通过定义转换模板XLST文档,将XML文档转换为HTML文档显示。 XML文档+XLST文档 HTML文档 • XML文档结构树:将XML文档看作一个文档结构树,根节点代表整个文档,处理指令、注释和各个元素都是结构树的一个节点。根元素之下的各层次子元素构成一系列的子节点。注意根元素不是树的根节点。 • XSLT转换原理:将XML文档结构树转换为一个有样式信息的HTML结果树。在XSLT文档中定义了与XML文档中各个逻辑成分相匹配的模板,以及匹配转换方式。

  5. 5.1 XLS简介 • XSL文档的格式: <?xml version="1.0" encoding="gb2312" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:template match="…"> <xsl:apply-templates select="…" /> <xsl:value-of select="…" /> </xsl:template> … … </xsl:template> </xsl:stylesheet>

  6. 5.1 XLS简介 • 说明: • XSL文档是XML文档,故第一行必须是XML声明语句。大小写敏感 。 • 第二行是XSL声明语句,注意所使用的名称空间。 • 主要内容是一个或多个模板 <xsl:template match=…>…</xsl:template> • 在XSL文档中使用HTML标记,用于指明如何将XML转换成HTML。注意区分大小写,HTML的空标记,比如<br><hr>必须写成<br/><hr/> • 在XSL文档中可以通过使用HTML使用CSS

  7. 5.1 XLS简介 • 名称空间说明:有两种。用第一种较好。注意大小写不能错! • <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> 和 • <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40">

  8. 5.1 XLS简介 • XML引用XSL:类似引用CSS,在XML文档中使用引用指令: <?xml version="1.0" encoding="GB2312" ?> <?xml:stylesheet type="text/xsl" href="文件名.xsl"?> 或 <?xml-stylesheet type="text/xsl" href="文件名.xsl"?>

  9. 5.2 XSL基本语法 • XSL模板: XSL文档的内容是一个或多个模板指令,每个模板与文档树的指定元素节点匹配,指定元素节点显示的样式。一个XSL文档至少包含一个与根节点匹配的模板。 • XSL指令: <xsl:template match="…">…</xsl:template> <xsl:apply-templates select="…" /> <xsl:value-of select="…" />

  10. 5.2.1 XSL模板定义指令 • XSL模板指令:表示与文档树的指定元素节点匹配,指定匹配后所使用的显示样式。 <xsl:template match="元素名"> … …显示样式 </xsl:template> • XSL模板指令:表示与文档树的根节点匹配 <xsl:template match="/"> … …显示样式 </xsl:template>

  11. 5.2.1 XSL模板定义指令 • XSL模板指令:表示与文档树的未指定匹配样式的节点匹配 <xsl:template match="*"> … …显示样式 </xsl:template> • 理解<xsl:template match=…>作用:相当于编程中定义一个函数,并没有调用。但是<xsl:template match="/">是主程序,自动调用。

  12. 5.2.2 XSL模板调用指令 • XSL模板调用指令: <xsl:apply-templates select="元素名" /> • 位置:出现在 <xsl:template match=…>…</xsl:template>中间 • 作用:在当前位置,使用指定的模板产生HTML代码。相当于编程中调用已经定义的一个函数。

  13. 5.2.3 XSL选取值输出指令 • XSL选取值输出指令: <xsl:value-of select="元素名" /> • 位置:出现在 <xsl:template match=…>…</xsl:template>中间 • 作用:在当前位置,取出指定元素的值。

  14. 5.2.4 简单实例 • XML文档:Students.xml <?xml version="1.0" encoding="gb2312" ?> <?xml-stylesheet type="text/xsl" href="Students.xsl"?> <roster> 学生花名册 <student class= "金融" > <name>李华</name> <origin>河北</origin> <age>15</age> <telephone>62875555</telephone> </student>

  15. 5.2.4 简单实例 • XML文档:Students.xml续 <student class= "保险" > <name>张三</name> <origin>北京</origin> <age>14</age> <telephone>82873425</telephone> </student> </roster>

  16. 5.2.4 简单实例 • XSL文档:Students.xsl <?xml version="1.0" encoding="gb2312" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <HTML> <HEAD><TITLE>学生花名册</TITLE></HEAD> <BODY> <xsl:apply-templates select="roster"/> </BODY> </HTML> </xsl:template>

  17. 5.2.4 简单实例 • XSL文档:Students.xsl续1 <xsl:template match="roster"> <TABLE BORDER="1"> <CAPTION>学生花名册</CAPTION> <TR> <TH>姓名</TH> <TH>籍贯</TH> <TH>年龄</TH> <TH>电话</TH> </TR> <xsl:apply-templates select="student"/> </TABLE> </xsl:template>

  18. 5.2.4 简单实例 • XSL文档:Students.xsl续2 <xsl:template match="student"> <TR> <TD><xsl:value-of select="name"/></TD> <TD><xsl:value-of select="origin"/></TD> <TD><xsl:value-of select="age"/></TD> <TD><xsl:value-of select = "telephone"/></TD> </TR> </xsl:template> </xsl:stylesheet>

  19. 5.2.4 简单实例 • 运行效果:双击Students.xml

  20. 5.2.4 简单实例 • Students.xsl转换对应关系图:

  21. 5.2.4 简单实例 • XSL文档:Students.xsl,另一种格式,不同的模板设计,导致同一个文档不同的输出效果。 <?xml version="1.0" encoding="gb2312" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

  22. 5.2.4 简单实例 • XSL文档:Students.xsl续1,另一种格式 <xsl:template match="/"> <HTML> <HEAD> <TITLE>学生花名册</TITLE> </HEAD> <BODY> <xsl:apply-templates select="roster"/> </BODY> </HTML> </xsl:template> <xsl:template match="roster"> <H2>学生花名册</H2> <HR/> <xsl:apply-templates select="student"/> </xsl:template>

  23. 5.2.4 简单实例 • XSL文档:Students.xsl续2,另一种格式 <xsl:template match="student"> <b><xsl:value-of select="name"/></b> <xsl:value-of select="age"/> <i><xsl:value-of select="origin"/></i> <xsl:value-of select = "telephone"/> <HR/> </xsl:template> </xsl:stylesheet>

  24. 5.2.4 简单实例 • 运行效果:双击Students.xml

  25. 5.2.4 简单实例 • 使用@属性名:注意在前面的简单实例中没有显示班级数属性,现在在适当地方加上如下语句 <xsl:value-of select = "@class"/> • 效果如下:

  26. 5.2.4 简单实例 • XML文档:Students_sex.xml修改.在name元素中增加sex属性 <?xml version="1.0" encoding="gb2312" ?> <?xml-stylesheet type="text/xsl" href="Students.xsl"?> <roster> 学生花名册 <student class= "金融" > <name sex= "女" >李华</name> <origin>河北</origin> <age>15</age> <telephone>62875555</telephone> </student>

  27. 5.2.4 简单实例 • XML文档:Students_sex.xml续 <student class= "保险" > <name sex= "男">张三</name> <origin>北京</origin> <age>14</age> <telephone>82873425</telephone> </student> </roster>

  28. 5.2.4 简单实例 Xsl读取sex的语句: <xsl:value-of select="name/@sex"/>。

  29. 5.3 XSL节点选择 • 匹配的重要性:在利用XSL进行转换的过程中,匹配非常重要。在模板声明语句<xsl:template match="">和模板应用语句<xsl:apply-templates select="">中,用引号括起来的部分的目的就是为了在匹配XML文档结构树时能够准确地找到某一个节点元素。

  30. 5.3.1 XSL节点匹配 • 使用元素名匹配节点: <xsl:template match="student"> • 根节点匹配符:/ <xsl:template match="/"> • 根元素匹配符:/* <xsl:template match="/*"> • 当前节点匹配符:一个点 . <xsl:template match= "."> • 父节点匹配符:两个点 .. <xsl:template match= "..">

  31. 5.3.1 XSL节点匹配 • 在match中使用路径: <xsl:template match="/roster/student/name"> • 如果roster是当前路径: <xsl:template match="student/name"> • 在select中使用路径: <xsl:apply-template select="/roster/student/name"> • 如果roster是当前路径: <xsl:apply-template select="../student/name">

  32. 5.3.1 XSL节点匹配 • 特殊路径符号*:表示任意节点 <xsl:apply-template select="roster/*/name"> • 特殊路径符号//:表示任意多层节点 <xsl:apply-template select="//name">

  33. 5.3.1 XSL节点匹配 • 附加子元素条件选择节点:选择具有name子元素的student元素 <xsl:apply-template select= "student[name]"> • 附加指定字符串条件选择节点:选择具有age子元素内容为"14"的student元素 <xsl:template match= "student[age='14']">

  34. 5.3.1 XSL节点匹配 • 附加属性条件选择节点:选择具有class属性的student元素 <xsl:apply-template select= "student[@class]"> • 附加指定属性条件选择节点:选择具有age子元素内容为"14"的student元素 <xsl:template match= "student[@class='金融']">

  35. 5.4 XSL控制指令 • 控制指令:在XSL模板中使用,功能类似C语言的if、switch、for语句。 • 简单条件标记指令:<xsl:if>,注意没有else • 多条件标记指令:<xsl:choose> • 循环处理标记指令:<xsl:for-each>

  36. 5.4.1 XSL判断指令 • 判断指令1:以元素名为条件 <xsl:if match="元素名称">… </xsl:if> • 判断指令2:以元素内容为条件 <xsl:if test="元素名称[.='元素内容']''>…</xsl:if> • 判断指令3:以元素属性为条件 <xsl:if match=".[@属性名称='属性值']">…</xsl:if> 或 <xsl:if test=".[@属性名称='属性值']">…</xsl:if>

  37. 5.4.1 XSL判断指令 例子: <xsl:if match= "name">...</xsl:if> <xsl:if test= "name[.='张三']">...</xsl:if> <xsl:if test= "age[.> '15']'">...</xsl:if> <xsl:if test= "age[.> ='15']'">...</xsl:if> <xsl:if test= "age[.&lt; '15']'">...</xsl:if> <xsl:if test= "age[.&lt;='15']'">...</xsl:if> <xsl:if test= ".[@class='保险']">...</xsl:if> <xsl:if match= ".[@class='保险']">...</xsl:if> 问题:不等于怎么写?

  38. 5.4.2 XSL多条件判断指令 • 语法:test的写法与<xsl:if test=>一样 <xsl:choose> <xsl:when test="…"> … </xsl:when> … <xsl:otherwise> … </xsl:otherwise> </xsl:choose>

  39. 5.4.3 XSL循环指令 语法: <xsl:for-each select="…" order-by="…"> <xsl:value-of …/> … </xsl:for-each> 例子: students.xml, students3.xsl或p143 select="XML文件中标记名" 排序:order-by="+sex;-score"表示按sex升序、score降序排序。

  40. 5.4.4 XSL排序指令 • 排序指令:xsl:sort对于用xsl:for-each或xsl:apply-templates匹配的节点,可使用xsl:sort将所选节点内容进行排序,如: • 排序指令1:以id为关键字按大写优先排序 <xsl:sort case-order="upper-first" select="@id"/> • 排序指令2:以id为关键字按小写优先排序 <xsl:sort case-order="lower-first" select="@id"/>

  41. 5.4.4 XSL排序指令 • 排序指令3:以id为关键字按字母升序排序 <xsl:sort order="ascending" select="@id "/> • 排序指令4:以id为关键字按字母降序排序 <xsl:sort order="descending" select="@id "/>

  42. 5.4.4 XSL排序指令 • 排序指令5:以id为关键字按文本类型排序,如对于一组id数据101,2,44,305来说,排序结果是101,2,305,44 <xsl:sort data-type="text" select="@id"/> • 排序指令6:以id为关键字按数据类型排序,上面一组数据的排序结果是2,44,101,305 <xsl:sort data-type="number" select="@id"/>

  43. 5.4.5 XSL指令实例 例子说明:students_sex.xml, students3.xsl。注意其中的<!--定义模板-->、 <!--调用模板-->、 <!--循环指令-->、<!--排序指令-->、<!--多条件选择指令-->、<!--读取属性指令-->、<!--读取子元素指令-->、<!--读取子元素属性指令-->

More Related