四、xslt简介了解XML的基本语法、Schema的语法还远远不够,XML是对数据和数据结构的存储,而Schema是对XML数据类型的定义。直到这
里还没有对XML数据的显示进行处理。虽然可以通过内置有XML解析器的浏览器直接对XML数据进行查看,但毕竟看到的只是以树状结构
显示的XML数据。
如果要把XML数据以漂亮的形式显示出来就需要XSLT帮忙了。XSLT可以把XML处理成HTML形式输出、WAP形式输出,甚至也可以
是Word文档的格式。其中最常用到的还是HTML的格式,下面讲解中用到的所有例子都以HTML的转换格式为例子。那就不说废话了,还
是先看一个XSLT的例子吧!
这个XSLT用到的一个XML文档,文档如下:
<?xml version = "1.0" encoding="GB2312"?>
<?xml:stylesheet type="text/xsl" href="s_xlt.xslt"?>
<resumes>
<resume>
<name>张立东</name>
<sex>男</sex>
<age>28</age>
<birthday>
<year>1974</year>
<month>8</month>
<day>10</day>
</birthday>
<address>北京市 海淀区</address>
</resume>
<resume>
<name>张三</name>
<sex>男</sex>
<age>50</age>
<birthday>
<year>1951</year>
<month>6</month>
<day>9</day>
</birthday>
<address>山西省</address>
</resume>
<resume>
<name>李四</name>
<sex>男</sex>
<age>29</age>
<birthday>
<year>1973</year>
<month>7</month>
<day>12</day>
</birthday>
<address>山东省</address>
</resume>
</resumes>
注:在上面的XML文档中多了下面的一句:
<?xml:stylesheet type="text/xsl" href="s_xlt.xslt"?>
这一句就是对XSLT的引用,其中href中的内容是对具体XSLT文档位置的指定,有关s_xlt.xslt中的内容就是下面要介绍的XSL
T例子的内容。有关如何对XML,XLST、Schema的使用和测试,可以参考“一个应用了xml、schema和xlst的例子”部分。
对这个XML文档进行转换处理的XSLT文档如下:
[1]<?xml version="1.0" encoding="GB2312"?>
[2]<xsl:stylesheet version="1.0" xmlns:xsl="' target=_blankhttp://www.w3.org/TR/WD-xsl">
[3] <xsl:template match="/">
[4] <HTML>
[5] <HEAD>
[6] <TITLE>个人简历</TITLE>
[7] </HEAD>
[8] <BODY>
[9] <xsl:for-each select="/resumes/resume">
[10] <P>
[11] <TABLE border="1" >
[12] <CAPTION style="font-size: 150%; font-weight: bold">
[13] 个人简历
[14] </CAPTION>
[15] <TR>
[16] <TH>姓名</TH><TD><xsl:value-of select="name"/></TD>
[17] <TH>性别</TH><TD><xsl:value-of select="sex"/></TD>
[18] <TH>生日</TH><TD><xsl:value-of select="birthday/year"/>年
<xsl:value-of select="birthday/month"/>月<xsl:value-of select="birthday/day"/>日</TD>
[19] </TR>
[20] <TR>
[21] <TH>地址</TH><TD colspan="5"><xsl:value-of select="address"/></TD>
[22] </TR>
[23] </TABLE>
[24] </xsl:for-each>
[25] </BODY>
[26] </HTML>
[27] </xsl:template>
[28]</xsl:stylesheet>
[1]XML的序言,从第一条语句可以看出XSLT也是符合XML语法的。
[2]XSLT的名域。Xsl:stylesheet是XSLT的根元素,xsl是XSLT的名域标识。所以都要在XSLT的语句前面加上xsl:来表明是XSLT
的语句。
[3] <xsl:template match="/"> 是XSLT语言的匹配模式,主要是和引用它的XML文档的根进行匹配。其中/是代表XML文档根的含
义。 例如:个人简介中的name可以用/resumes/resume/name
的方式进行引用。(由于这里只是对XSLT入门的一个初步介绍,对有关XML路径想详细了解的读者可以参考XML文档的XPATH部分。)
[4]-[8]可以直接输出,这部分是符合HTML语法的信息结构,HTML文档的开始部分和head的定义。
[9] <xsl:for-each select="/resumes/resume">是XSLT语言的选择模式,是循环的对所有的/resumes/resume元素和这个元素所
包含的子元素进行处理。
[10]-[15] 可以直接输出,符合HTML的语法结构。
[16] <TH>姓名</TH><TD><xsl:value-of select="name"/></TD>
在这一行中有HTML的语句和也有XSLT的语句。其中<xsl:value-of select="name"/>也是属于选择模式的语句,可以直接把select选中
的元素内容提取处理,处理以后的结果应该是:<TH>姓名</TH><TD>张立东</TD>。
[18]-[23]分别是对其他部分信息的显示处理,其中也包含了部分的HTML语句。
[24] <xsl:for-each> 语句的结束部分。
[25]-[26]HTML语句。
[27] <xsl:template> 语句的结束部分。也就是对整个XML文档处理的结束。因为每个XML文档只有一个根而这条语句是对根的部
分处理,所以是对整个XML文档处理的结束。
[28] XSLT文档的结束。
经上面对这个简单例子的介绍,大家对XSLT对XML文档的处理可能已经有了一个基本的了解,可以简单的通过XSLT对XML进行
处理啦。在结束这个部分之前对XSLT的语法做一个简单的小结:
可以大致的把模式语言分为三种:
选择模式
<xsl:for-each>、<xsl:value-of>,和 <xsl:apply-templates>
测试模式
<xsl:if> 和<xsl:when>
匹配模式
<xsl:template>
选择模式语句将数据从XML中提取出来,这是一种简单获得数据的方法。这几个标记都有一个select属性,选取XML中特定结
点名的数据。
测试模式是对数据的一个判断,然后根据判断和匹配的结果进行处理。有些和程序语言中的判断语句和多判断语句形似。
匹配模式是一个可以单独列出来的XSLT语句片断,可以完成对一个特定部分的XSLT处理。有些和程序设计中的子程序相似。