当前位置: 首页 > 图文教程 > XML家族 > XML > XSL基础教程第二章

XML
XML简易教程之四
XML与HTML的结合(上)
XML与HTML的结合(下)
XML入门的常见问题(一)
XML入门的常见问题(二)
XMLHTTP资料
什么是XML
什么是 XML Web Service
XML正在接管Web服务 成为SOA的基础
怎么样在网页上读取远程xml的数据
XML教程—编写结构完整的XML文档
读写xml文件的2个小函数
XML文档的基本操作
初学者如何开发出一个高质量的J2EE系统
优化 JavaScript 代码
自动更新程序的设计框架
使Firefox对XML的处理兼容IE的节点处理方法
WML学习之四 锚和任务
WML学习之五 显示表单
WML学习之六 事件

XML 中的 XSL基础教程第二章


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 48 ::
收藏到网摘: n/a

XSL–转换

本节将举例学习如何用XSL将XML转换成HTML。这个举例的细节将在下一节中解释。

从XML文档开始

首先从打算转换成HTML的XML文档开始:
   

以下为引用的内容:
    <?xml version="1.0"?> 
   
    <CATALOG> 
   
     <CD> 
   
      <TITLE>Empire Burlesque</TITLE> 
   
      <ARTIST>Bob Dylan</ARTIST> 
   
      <COUNTRY>USA</COUNTRY> 
   
      <COMPANY>Columbia</COMPANY> 
   
      <PRICE>10.90</PRICE> 
   
      <YEAR>1985</YEAR> 
   
     </CD> 
   
    . 
   
    . 
   
    . 

如果使用的是Internet Explorer 5.0或更高版本,就可以查看这个XML文件的显示结果。

创建一个XSL样式表文档

现在用转换模板来创建一个XSL样式表:
   

以下为引用的内容:
    <?xml version='1.0'?> 
   
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> 
   
    <xsl:template match="/"> 
   
     <html> 
   
     <body> 
   
      <table border="2" bgcolor="yellow"> 
   
       <tr> 
   
        <th>Title</th> 
   
        <th>Artist</th> 
   
       </tr> 
   
       <xsl:for-each select="CATALOG/CD"> 
   
       <tr> 
   
        <td><xsl:value-of select="TITLE"/></td> 
   
        <td><xsl:value-of select="ARTIST"/></td> 
   
       </tr> 
   
       </xsl:for-each> 
   
      </table> 
   
     </body> 
   
     </html> 
   
    </xsl:template> 
   
    </xsl:stylesheet> 

如果使用的是Internet Explorer 5.0或更高版本,就可以查看这个XSL文件的显示结果。

将样式表连接到XML文档

现在向XML文档中增加一个XSL样式表引用:

以下为引用的内容:
    <?xml version="1.0"?> 
   
    <?xml-stylesheet type="text/xsl" href="cd_catalog.xsl"?> 
   
    <CATALOG> 
   
     <CD> 
   
      <TITLE>Empire Burlesque</TITLE> 
   
      <ARTIST>Bob Dylan</ARTIST> 
   
      <COUNTRY>USA</COUNTRY> 
   
      <COMPANY>Columbia</COMPANY> 
   
      <PRICE>10.90</PRICE> 
   
      <YEAR>1985</YEAR> 
   
     </CD> 
   
    . 
   
    . 
   
    . 

如果有一个与XSL兼容的浏览器,例如Internet Explorer 5.0或更高版本,那么就能很好地将XML转换成HTML。点击这里查看结果。

XSL模板

XSL用模板来描述如何输出 XML。

CSS的使用规则

如果已经学习过CSS的知识,我们就会知道CSS是用一个或多个规则来定义HTML元素的输出,用一个选择器将规则与一个HTML元素联系起来。比如以下这个CSS规则中的p选择器说明应该用一种叫做arial的字体来显示一个<p>元素:

p { font-family: arial }

XSL使用模板

XSL使用一个或多个模板来定义如何输出XML元素,用一个匹配属性来将模板与一个XML元素联系起来,还可以用匹配属性来为XML文档的一个完整分支来定义模板。

请看以下的XSL样式表,它包含一个模板以输出前一节中的XML CD目录:
    

以下为引用的内容:
    <?xml version='1.0'?> 
   
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> 
   
    <xsl:template match="/"> 
   
     <html> 
   
     <body> 
   
     <table border="1"> 
   
       <tr> 
   
       <th>Title</th> 
   
       <th>Artist</th> 
   
       </tr> 
   
       <tr> 
   
       <td>.</td> 
   
       <td>.</td> 
   
       </tr> 
   
     </table> 
   
     </body> 
   
     </html> 
   
    </xsl:template> 
   
    </xsl:stylesheet> 

由于样式表本身就是一个XML文档,因此文档以一个xml声明开始:<?xml version='1.0'?>。第二行中的xsl:stylesheet标记定义了样式表的开始。第三行中的xsl:template标记定义了一个模板的开始。模板属性match="/"将模板与XML源文档的根 (/)联系(匹配)起来。文档的其它部分包含了模板本身,最后两行定义了模板的结束和样式表的结束。

用Internet Explorer 5来看看XML文件、XSL文件以及结果。

<xsl:value-of>元素

前面例子的结果有点令人失望,因为没有将数据从XML文档复制到输出中。XSL的<xsl:value-of>元素可以用来选择进入XSL转换输出流中的XML元素:
   

以下为引用的内容:
    <?xml version='1.0'?> 
   
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> 
   
    <xsl:template match="/"> 
   
     <html> 
   
     <body> 
   
     <table border="1"> 
   
       <tr> 
   
       <th>Title</th> 
   
       <th>Artist</th> 
   
       </tr> 
   
       <tr> 
   
       <td><xsl:value-of select="CATALOG/CD/TITLE"/></td> 
   
       <td><xsl:value-of select="CATALOG/CD/ARTIST"/></td> 
   
       </tr> 
   
     </table> 
   
     </body> 
   
     </html> 
   
    </xsl:template> 
   
    </xsl:stylesheet> 

注意:选择属性值用到的语法被称为XSL模式。它工作起来就象是在一个文件系统中航行,其中用一个前斜线 (/) 来选择子目录。

用Internet Explorer 5来看看XML文件、XSL文件以及结果。

<xsl:for-each>元素

前面例子中的结果还是有点不太令人满意,因为从XML文档中只复制了一行数据到输出。XSL的<xsl:for-each>元素可以用来将每个XML元素选择到XSL转换的输出流中:

以下为引用的内容:
    <?xml version='1.0'?> 
   
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> 
   
    <xsl:template match="/"> 
   
     <html> 
   
     <body> 
   
      <table border="1"> 
   
       <tr> 
   
        <th>Title</th> 
   
        <th>Artist</th> 
   
       </tr> 
   
       <xsl:for-each select="CATALOG/CD"> 
   
       <tr> 
   
        <td><xsl:value-of select="TITLE"/></td> 
   
        <td><xsl:value-of select="ARTIST"/></td> 
   
       </tr> 
   
       </xsl:for-each> 
   
      </table> 
   
     </body> 
   
     </html> 
   
    </xsl:template> 
   
    </xsl:stylesheet> 

Xsl:for-each元素在XML文档中查找元素,然后为每个元素重复模板的一部分。

用Internet Explorer 5来看看XML文件、XSL文件以及结果。