XSLT模板转换XML文档

简介:

 XML文档只能表现数据的内容,而实际的数据则是要呈现在网页中的。使用CSS可以格式化XML文档,使它显示出来,这个内容在上一篇中已经做了详细的说明。除了CSS外,还有一种语言也可以在网页中表现出XML数据内容,那就是XSLXSL语言包括XSLTXSL Transformation)和FOFormat Object)。XSLT文档可以将XML文档转化为其它文档形式,如HTMLText等。FO用于格式化输出,由于W3CFO还形成统一标准,这里将只说明XSLT的用法。

     使用XSLT时最重要的部分是选择XML节点值和创建模板。创建模板使用的标签是<xsl:template></xsl:template>,通常这个标签需要一个match属性,用来确定它所匹配的XML节点。选择XML节点值使用的标签是<xsl:value-of  />,这个标签需要select属性来确定它匹配的XML节点。下面将用一个简单的例子说明,看下面的XML文档:

1 <?xml version="1.0" encoding="utf-8"?>
2 <?xml-stylesheet type="text/xsl" href="stylesheet.xslt"?>
3 <xml>
4   <book>
5     <name>Xml
应用系列</name>
6     <author>学路的小孩</author>
7     <date>2009-03-23</date>
8   </book>
9 </xml>

     代码说明:第一行是XML文件的声明部分;第二行声明引入XSLT文件,type属性说明文件的类型是text/xslhref属性指向一个XSLT文件,文件名为stylesheet.xslt。第三行以后为XML文档部分。下面是stylesheet.xslt的内容:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 3   <xsl:template match="/">
 4     <html>
 5       <head>
 6         <title>
第一个XSLT文件</title>
 7       </head>
 8       <body>
 9         <xsl:apply-templates select="xml"></xsl:apply-templates>
10       </body>
11     </html>
12   </xsl:template>
13   <xsl:template match="xml"> 
14     <table style="background-color:orange">
15       <tr>
16         <th>
书名</th>
17         <th>作者</th>
18         <th>日期</th>
19       </tr>
20       <xsl:apply-templates select="book"></xsl:apply-templates>
21     </table>
22   </xsl:template>
23   <xsl:template match="book">
24     <tr>
25       <td>
26         <xsl:value-of select="name"/>
27       </td>
28       <td>
29         <xsl:value-of select="author"/>
30       </td>
31       <td>
32         <xsl:value-of select="date"/>
33       </td>
34     </tr>
35   </xsl:template>
36 </xsl:stylesheet>

     代码说明:由于XSLT文档的格式依然是XML格式,所以第一行为XML的头部声明;第二行则是XSLT的版本和命名空间声明,并且该标签是XSLT文档的跟节点。第三行使用<xsl:template></xsl:template>创建一个模板,select="/"表示匹配的是文档的根节点。第四行到第十一行是这个节点要生成的HTML节点信息,其中第九行<xsl:apply-templates />标签表示应用模板,其中select="xml"表示要调用的模板为匹配XML节点的模板,这个模板在第十三行出现。后面的所有行(除了第26行等)无非是这些内容的重复,不做太多介绍。第二十六行是选择name标签的内容。使用IE打开XML文件,显示内容如下:     

 

     另外,XSLT还具有流程控制、条件选择、循环处理、元素排序等功能。下面通过一个实例来说明,其中XML文档内容如下:

复制代码
 1  <? xml version="1.0" encoding="utf-8"  ?>  
 2  <? xml-stylesheet type="text/xsl" href="bookListStyle.xslt" ?>
 3  < bookList >
 4     < category  type ="计算机" >
 5       < book  id ="1" >
 6         < title > 网页与Web程序设计 </ title >
 7         < author > 吴利兵 </ author >
 8         < pubInfo >
 9           < publisher > 机械工业出版社 </ publisher >
10           < pubDate > 2009-04-01 </ pubDate >
11           < price > 16.50 </ price >
12         </ pubInfo >
13       </ book >
14       < book  id ="2" >
15         < title > 软件工程 </ title >
16         < author > 邓良松 </ author >
17         < pubInfo >
18           < publisher > 西安电子科技出版社 </ publisher >
19           < pubDate > 2005-06-10 </ pubDate >
20           < price > 33.20 </ price >
21         </ pubInfo >
22       </ book >
23     </ category >
24     < category  type ="小说" >
25       < book  id ="3" >
26         < title > 茶花女 </ title >
27         < author > 小仲马 </ author >
28         < pubInfo >
29           < publisher > 外语出版社 </ publisher >
30           < pubDate > 2005-06-30 </ pubDate >
31           < price > 22.00 </ price >
32         </ pubInfo >
33       </ book >
34       < book  id ="4" >
35         < title > 红楼梦 </ title >
36         < author > 曹雪芹 </ author >
37         < pubInfo >
38           < publisher > 中国教育出版社 </ publisher >
39           < pubDate > 2005-09-06 </ pubDate >
40           < price > 55.00 </ price >
41         </ pubInfo >
42       </ book >
43     </ category >
44  </ bookList >
复制代码

     bookListStyle.xslt文件的内容如下:

复制代码
<? xml version="1.0" encoding="UTF-8"  ?>
< xsl:stylesheet  version ="1.0"  xmlns:xsl ="http://www.w3.org/1999/XSL/Transform" >
  
< xsl:template  match ="/" >
    
< html >
      
< head >
        
< title > 图书列表 </ title >
        
< style >
          
<![CDATA[
            body,td,th{
              font-size:10pt;
              font-family:宋体;
            }
            body{
              background-color:#c0c0c0;
            }
            table{
              border:solid red 1px;
              margin-left:30px;
              margin-right:30px;
              background-color:#ffffc0;
              cellPadding:4;
            }
          
]]>
        
</ style >
      
</ head >
      
< body >
        
< table >
          
< caption  align ="top"  style ="font-weight:bold; text-align:left" > 图书列表 </ caption >
          
< tr  style ="color:#8b0000"  align ="left" >
            
< th  width ="5%" > 编号 </ th >
            
< th  width ="10%" > 类别 </ th >
            
< th  width ="25%" > 书名 </ th >
            
< th  width ="20%" > 作者 </ th >
            
< th  width ="25%" > 出版社 </ th >
            
< th  width ="10%" > 出版日期 </ th >
            
< th  width ="5%" > 定价 </ th >
          
</ tr >
          
< xsl:for-each  select ="bookList/category/book" >
            
< xsl:sort  select ="pubInfo/price"  order ="descending" />
            
< tr >
              
< xsl:attribute  name ="style" >
                color:
                
< xsl:if  test ="../@type[.='计算机']" > blue </ xsl:if >
              
</ xsl:attribute >
              
< xsl:attribute  name ="title" >
                
< xsl:value-of  select ="title" />
                
< xsl:choose >
                  
< xsl:when  test ="../@type[.='计算机']" >
        类别:计算机类图书
                  
</ xsl:when >
                  
< xsl:otherwise >
        类别:小说类图书
                  
</ xsl:otherwise >
                
</ xsl:choose >
        作者:
< xsl:value-of  select ="author" ></ xsl:value-of >
                
< br />
        出版社:
< xsl:value-of  select ="pubInfo/publisher" />
                
< br />
        出版日期:
< xsl:value-of  select ="pubInfo/pubDate" />
                
< br />
        定价:
< xsl:value-of  select ="pubInfo/price" />
              
</ xsl:attribute >
              
< td >
                
< xsl:value-of  select ="@id" />
              
</ td >
              
< td >
                
< xsl:value-of  select ="../@type" />
              
</ td >
              
< td >
                
< xsl:value-of  select ="title" />
              
</ td >
              
< td >
                
< xsl:value-of  select ="author" />
              
</ td >
              
< td >
                
< xsl:value-of  select ="pubInfo/publisher" />
              
</ td >
              
< td >
                
< xsl:value-of  select ="pubInfo/pubDate" />
              
</ td >
              
< td >
                
< xsl:value-of  select ="pubInfo/price" />
              
</ td >
            
</ tr >
          
</ xsl:for-each >
        
</ table >
      
</ body >
    
</ html >
  
</ xsl:template >
</ xsl:stylesheet >
复制代码

 

     这里不再对代码进行分析,请读者自己理解这段代码,并动手写一下自己的XSLT模板。这段代码的运行效果如下图:

 

 

声明 作者:齐飞
Email:youring2@gmail.com
欢迎转载,但请保留本段信息!

如果认为此文对您有帮助,别忘了支持一下哦!

作者: 齐飞
声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

转载:http://www.cnblogs.com/youring2/archive/2009/04/03/1425806.html
目录
相关文章
|
2月前
|
XML JavaScript API
Ruby 教程 之 Ruby XML, XSLT 和 XPath 教程 3
Ruby XML, XSLT 和 XPath 教程
33 1
|
9月前
|
XML JSON fastjson
企业微信通讯录回调模板-XML转JSON-让回调不再难!
企业微信通讯录回调模板-XML转JSON-让回调不再难!
352 0
|
16天前
|
XML JavaScript 前端开发
XML文档节点导航与选择指南
XPath是XSLT的核心部分,用于XML文档的节点定位和选择。它采用路径表达式语法,包含200多个内置函数处理各种数据类型。XPath在编程语言如JavaScript中广泛使用,与XSLT配合进行XML转换和样式处理。它涉及7种节点类型,如元素、属性和文本,以及多种节点间关系,如父、子、同级等。XPath还使用轴(如ancestor、child)来描述节点间的关联,并支持运算符进行逻辑和数学操作。
27 0
XML文档节点导航与选择指南
|
6月前
|
XML JavaScript 前端开发
SAP UI5 本地开发如何实现 XML 和 JavaScript 代码的自动完成和嵌入式 API 文档自动显示试读版
SAP UI5 本地开发如何实现 XML 和 JavaScript 代码的自动完成和嵌入式 API 文档自动显示试读版
65 0
|
2月前
|
XML 数据格式 Ruby
Ruby 教程 之 Ruby XML, XSLT 和 XPath 教程 5
Ruby XML, XSLT 和 XPath 教程
93 0
|
2月前
|
XML 数据格式 Ruby
Ruby 教程 之 Ruby XML, XSLT 和 XPath 教程 4
Ruby XML, XSLT 和 XPath 教程
110 1
|
4月前
|
Java
application.properties模板+application.yml模板+pom模板+mapper.xml模板(springboot)
application.properties模板+application.yml模板+pom模板+mapper.xml模板(springboot)
36 0
|
6月前
|
XML JavaScript 数据格式
使用Dom4J解析XML文档
XML解析的方式 XML常见的两种解析方式: DOM: 要求解析器将整个XML文件全部加载到内存中,生成一个Document对象 优点:元素和元素之间保留结构、关系,可以针对元素进行增删查改操作 缺点:如果XML文件过大,可能会导致内存溢出 SAX:是一种速度更快,更加高效的解析方式。它是逐行扫描,边扫描边解析,并且以事件驱动的方式来进行具体的解析,每解析一行都会触发一个事件 优点: 不会出现内存溢出的问题,可以处理大文件 缺点:只能读,不能写 概念辨析: 解析器就是根据不同的解析方式提供具体的实现。 为了方便开发人员来解析XML,有一些方便操作的类库。例如Dom4j其中就包含了很多解
58 0
|
6月前
|
XML JSON JavaScript
SAP Fiori Elements 应用里标准模板 XML Fragment 加载的逻辑和 XMLPreprocessor 的作用
SAP Fiori Elements 应用里标准模板 XML Fragment 加载的逻辑和 XMLPreprocessor 的作用
52 0
|
7月前
|
XML 数据格式
idea建xml模板
idea建xml模板
30 0