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
目录
相关文章
|
6月前
|
XML 存储 JavaScript
DOM 节点遍历:掌握遍历 XML文档结构和内容的技巧
**XML DOM 遍历、操作和导航概述** - 遍历XML节点树用于提取信息,例如,通过JavaScript的DOM API循环`&lt;book&gt;`子节点显示名称和值。 - DOM解析器处理XML文本数据,包括解析字符数据(PCDATA)和识别CDATA段。 - 节点导航涉及`parentNode`、`childNodes`等属性,`get_nextSibling`等辅助函数避免空文本节点。 - `getElementsByTagName`、`getAttribute`和`nodeValue`用于检索元素、属性值和文本。
92 6
DOM 节点遍历:掌握遍历 XML文档结构和内容的技巧
|
6月前
|
XML JavaScript API
Ruby 教程 之 Ruby XML, XSLT 和 XPath 教程 3
Ruby XML, XSLT 和 XPath 教程
58 1
|
3月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
142 7
使用Java和XPath在XML文档中精准定位数据
|
1月前
|
XML 前端开发 数据格式
使用 XSLT 显示 XML
10月更文挑战第1天
|
6月前
|
XML 存储 C#
C# xml文档反序列化记事
本文介绍了使用XmlSerializer进行XML序列化和反序列化的关键点。包括:1) 以独占方式读取XML文件以避免并发问题;2) 当元素名与类型名不一致时,可通过`[XmlArrayItem]`指定元素名,或创建继承自原始类型的子类;3) 处理DateTime反序列化错误,通过中间字符串属性转换;4) 提到了常用C#特性如`[XmlRoot]`, `[XmlElement]`, `[XmlAttribute]`, `[XmlIgnore]`和`[XmlArrayItem]`的作用。
|
6月前
|
XML JavaScript 数据格式
XML Schema(XSD)详解:定义 XML 文档结构合法性的完整指南
XML Schema(XSD)是用于定义XML文档结构的规范,它描述了元素、属性及其顺序、数据类型和约束。与DTD相比,XML Schema支持更多数据类型,如字符串、日期等,并且是基于XML的,允许扩展和重用。学习XML Schema有助于确保数据通信时双方对内容的理解一致,通过验证防止错误。示例展示了如何定义一个`note`元素,包含`to`, `from`, `heading`和`body`子元素,都是字符串类型。XML文档可以通过引用XML Schema进行验证,确保内容符合预设模式。
519 0
|
6月前
|
XML JavaScript 前端开发
XML文档节点导航与选择指南
XPath是XSLT的核心部分,用于XML文档的节点定位和选择。它采用路径表达式语法,包含200多个内置函数处理各种数据类型。XPath在编程语言如JavaScript中广泛使用,与XSLT配合进行XML转换和样式处理。它涉及7种节点类型,如元素、属性和文本,以及多种节点间关系,如父、子、同级等。XPath还使用轴(如ancestor、child)来描述节点间的关联,并支持运算符进行逻辑和数学操作。
86 0
XML文档节点导航与选择指南
|
6月前
|
XML 存储 数据格式
探索 DTD 在 XML 中的作用及解析:深入理解文档类型定义
DTD(文档类型定义)用于定义XML文档的结构和合法元素、属性。它允许不同团体就数据交换标准达成一致,并用于验证XML数据的有效性。DTD可通过内部声明(在XML文档内)或外部声明(在单独文件中)来定义。内部声明示例显示了如何定义`note`元素及其子元素的结构,而外部声明则引用外部DTD文件。元素、属性、实体和PCDATA/CDATA是XML构建模块。DTD中,元素通过ELEMENT声明定义,属性通过ATTLIST声明定义,实体声明提供特殊字符或外部资源的快捷方式。
118 0
|
6月前
|
XML 数据格式 Ruby
Ruby 教程 之 Ruby XML, XSLT 和 XPath 教程 4
Ruby XML, XSLT 和 XPath 教程
136 1
|
6月前
|
XML 数据格式 Ruby
Ruby 教程 之 Ruby XML, XSLT 和 XPath 教程 5
Ruby XML, XSLT 和 XPath 教程
119 0