一个人跳舞

导航

XML可扩展样式单语言

XML可扩展样式单语言
XSL是一种语言,通过对XML文档进行转换,然后将转换的结果表现出来。转换的过程是根据XML文档特性运用XSLT(XML Transformations)将XML文档转换为树形结构(结果树),这棵树是带有样式信息的。再按照FO(Formatted object)分析结果树,将XML文档表现出来。
XSL表现XML文档的两个步骤,建树和表现树。其中,建树可以在服务器端执行,也可以在客户端执行。在服务器端执行时,在服务器端转换生成HTML文档,然后传给客户端浏览。如果在客户端执行则需要客户端支持XML和XSL,因为从服务器端传来的是XML和XSL文档,这些文档在客户解析执行。
下面是一个完整的使用XSL样式单的例子。通过这个例子,为大家介绍XSLT的转换方法和XSLT的书写格式。
程序清单3-8:example-3-7.xml
                     <?xml version="1.0" encoding="gb2312"?>
                     <?xml-stylesheet type="text/xsl" href="example-3-8.xsl"?>
                     <档案>
                           <学生 性别="0">
                                 <姓名>张三</姓名>                      
                                 <ID>001</ID>
                                 <年龄>16</年龄>
                                 <电话>12345678</电话>
                           </学生>
                           <学生 性别="1">
                                 <姓名>李四</姓名>                      
                                 <ID>002</ID>
                                 <年龄>20</年龄>
                                 <电话>23456789</电话>
                           </学生>
                           <学生 性别="0">
                                 <姓名>王五</姓名>
                                 <ID>003</ID>
                                 <年龄>19</年龄>
                                 <电话>34567890</电话>
                           </学生>
                     </档案>
程序清单3-9:example-3-8.xsl
                     <?xml version="1.0" encoding="gb2312"?>
                     <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

                        <xsl:template><xsl:apply-templates/></xsl:template>
                        <xsl:template match="档案">
                              <html>
                                    <head>
                                     <title>学生档案示范</title>
                                    </head>
                                    <body>
                                         <table border="2" title="这是一个学生档案示范." align="center">
                                         <caption>学生档案示范</caption>
                                         <tr bgcolor="yellow">
                                           <th>姓名</th>
                                           <th>学号</th>
                                           <th>年龄</th>
                                           <th>联系电话</th>
                                         </tr>
                                         <xsl:for-each select="学生">
                                               <tr>
                                                  <td><xsl:value-of select="姓名"/></td>
                                                  <td><xsl:value-of select="ID"/></td>
                                                  <td><xsl:value-of select="年龄"/></td>
                                                  <td><xsl:value-of select="电话"/></td>
                                               </tr>
                                          </xsl:for-each>
                                        </table>                                    
                                    </body>
                              </html>
                          </xsl:template>
                      </xsl:stylesheet>
example-3-7.xml是一个XML文档,我们用XSL样式单example-3-8.xsl来表现这个XML文档。
XSL文档本身也是XML文档,所以第一行和XML文档一样,是文档声明。第二行声明了本XSL样式单的名称空间。
第四行指明应用模板函数。第5-31行是模板函数的定义。第5行说明了模板要匹配的节点。
XSL还提供一种类似于函数调用的方法去匹配模板。其形式为:
……
<xsl:apply-templates select="A"/>匹配参数为A的模板
……
<xsl:template match="A">参数为A的模板定义
……
</xsl:template>标记的匹配
通过上面的例子,我们可以知道XSLT实际上是通过模板(template)将源文档按照模板的格式转换为结果文档的。模板定义了一系列的元素来描述源文档中的数据和属性等内容,在经过转换之后,建立树形结构(带信息的结果树)。
在示例中,我们使用了循环来匹配模板:
<xsl:for-each select="学生">
   <tr>
     <td><xsl:value-of select="姓名"></td>
     <td><xsl:value-of select="ID"></td>
     <td><xsl:value-of select="年龄"></td>
     <td><xsl:value-of select="电话"></td>
   </tr>
</xsl:for-each>
这是一种类似于函数的调用的匹配方式。"xsl:for-each"元素循环调用"xsl:value-of"元素来匹配不同的标记,直至将所有的"学生"标记都匹配一遍后,才结束循环。

posted on 2005-04-18 17:24  煮鹤焚琴  阅读(268)  评论(0编辑  收藏  举报