xsl语言简易教程

来源:互联网 发布:nba篮球游戏网络 编辑:程序博客网 时间:2024/04/29 08:05
 
XSL 语言
它以XSL为开始,以XSLT,XPath和XSL-FO为终结。
以XSL为开始
XSL表示扩展样式表语言(EXtensible Stylesheet Language)。
因为基于XML样式表语言的需要,万维网联盟(W3C)开始着手发展XSL。
层叠式样式表(CSS)= HTML样式表
HTML使用预定义标签,并且,标签的含义比较容易理解。
在HTML中,<table>元素定义了一个表格,并且,浏览器知道该如何去显示它。
给HTML元素添加样式是比较容易的。通过使用CSS,让浏览器显示具有特殊字体和颜色的元素是非常容易的。
XSL=XML样式表
XML不使用预定义标签(我们可以使用任何我们自己喜欢的标签名字),这些标签的含义并不容易理解。
HTML中的<table>元素适用于定义一张表格的,因此浏览器知道该如何去显示它们。
给HTML元素添加样式是比较容易的。通过使用CSS,让浏览器显示具有特殊字体和颜色的元素是非常容易的。
XSL-扩展样式表语言(More Than a Style Sheet Language)
XSL由3部分组成:
XSLT-转变XML文档的语言。
XPath-对XML文档进行导航的语言。
XSL-FO - 格式化XML文档的语言。
关于XSLT的教程
剩下这部分的教程是关于XSLT的——转换XML文档的语言。
 
 
XSLT 介绍
XSLT是一种把XML文件转换成XHTML文档或者其他的XML文档的语言。
XPath是一种用于导航XML文档的语言。
你应该事先了解下面这些知识
如果你想继续下面的学习,你必须得掌握下面这些基本知识。
XML / XML 命名空间
XPath
如果你想学习上述语言,可以在网络学院找到这些教程.
什么是XSLT?
XSLT是一种用来转换XML / XSL文档结构的语言
XSLT是XSL最重要的部分
XSLT可以把XML文档转换成另一个XML文档
XSLT通过XPath对XML文档进行定位
XSLT是一种W3C推荐标准
XSLT=XSL转换
XSLT是XSL的最重要的一部分。
XSLT用于把XML文档转换成其它的XML文件,或者转换成另一种能被浏览器所识别的诸如HTML和XHTML类型的文档。通常情况下,XSLT是通过把每个XML元素转换成一个(X)HTML元素来完成的。
通过XSLT,你可以在已输出的文件里添加或删除元素和属性。你也可以把元素重新进行排列和分类,执行测试语句,决定是否隐藏元素,或者实现其它更多的功能。
我们通常这样来描述转换过程:XSLT把XML树形结构源文件换成XML树形结果。
XSLT使用XPath的方法
XSLT使用XPath查找XML文档中的信息。XPath用于对XML文件中的元素和属性进行定位或导航。
如果你想先学习XPath的相关知识,请先阅读我们的XPath教程.
它是怎样运行的?
在转换过程当中,XSLT使用XPath来定义源文档的某些部分,而这些源文档必须与一个或多个预定义的模版相匹配。当其中一个所匹配的源文件被找到以后,XSLT将会把这个源文件中相匹配的部分转换到结果文档中。
XSLT是一个网络标准
XSLT在1999年11月16日成为W3C推荐的标准。
 
XSLT 浏览器
几乎所有专业浏览器都支持XML和XSLT。
Mozilla Firefox
Mozilla火狐
1.0.2版本的火狐浏览器是支持XML和XSLT 的(以及CSS)。
Mozilla
Mozilla含有XML外部解析器并且支持XML+CSS的显示,同时,Mozilla也支持一些命名空间。
Mozilla可以执行XSLT。
Netscape
Netscape版本8使用的是Mozilla引擎,因此它和Mozilla一样支持XML / XSLT。
Opera
Opera版本9 ,支持XML和XSLT(以及CSS);Opera版本8只支持XML+CSS。
Internet Explorer
IE6浏览器支持XML,命名空间,CSS,XSLT和XPath。
IE5.0并不支持官方的W3C XSL推荐标准。
 
 
XSLT 转换
周日, 10/14/2007 - 14:21 — ppkosd
Example study: How to transform XML into XHTML using XSLT.
实例学习:如何通过XSLT把XML转换成XHTML。
此实例的详细情况将在下一章中作详细说明。
正确的样式表声明
我们使用根元素<xsl:stylesheet> 或<xsl:transform>对XSL样式表文档进行声明。
注意: <xsl:stylesheet> 和<xsl:transform>是完全相同的,使用哪一个都可以。
根据W3C XSLT 的推荐标准,声明 XSL 样式表的正确方法如下:
<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
或:
<xsl:transform version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
如果希望访问XSLT元素、属性和特征,那么,我们必须在文件的头部事先声明XSLT命名空间。
“xmlns:xsl="http://www.w3.org/1999/XSL/Transform” 指出了官方的W3C XSLT 命名空间。如果你使用了这个命名空间,你也必须注明属性版本“version="1.0"。
以XML源文件开始
让我们把下面的XML文档("cdcatalog.xml")转换成XHTML吧:
<?xml version="1.0" encoding="ISO-8859-1"?><catalog> <cd>    <title>Empire Burlesque</title>    <artist>Bob Dylan</artist>    <country>USA</country>    <company>Columbia</company>    <price>10.90</price>    <year>1985</year> </cd>...</catalog>
在火狐和IE浏览器中查看XML文件的方法: 打开XML文件(通常情况下是通过链接打开的)—XML文件将会显示包含颜色代码的根元素和子元素。单击左边元素的“+”和“-”,就可以展开或者收回元素结构列表。查看XML源文件的源代码(不含加号+和减号-),在浏览器菜单里选择“查看—源文件[ IE ]”或者“查看—页面源代码[ FF ]”。
在Netscape 6中查看XML文件的方法:打开XML文件,在XML文件里右键单击选择“查看—页面源代码”。XML文件将会把标有颜色代码的根元素和子元素的文档显示出来。
在Opera 7中查看XML文件的方法: 打开XML文件,在XML文件里右键单击选择“框架/查看源代码”。XML文件将会以纯文本的形式显示。
查看 "cdcatalog.xml"
创建一个XSL样式表
此时,你已经通过一个转换模板创建了一个XSL样式表文档("cdcatalog.xsl")。
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body>    <h2>My CD Collection</h2>    <table border="1">    <tr bgcolor="#9acd32">      <th align="left">Title</th>      <th align="left">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>
查看"cdcatalog.xsl"
将XSL样式表连接到XML文档中
把XSL样式表参数添加到XML文件("cdcatalog.xml")中:
<?xml version="1.0" encoding="ISO-8859-1"?><?xml-stylesheet type="text/xsl" href="cdcatalog.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> . . . </catalog>
如果你有一个支持XSLT的浏览器,它将会准确地帮你把XML文件转换成XHTML。
查看结果
以上实例的细节部分将会在下一章中作详细说明。
 
 
<xsl:template>
XSL样式表是由一个或多个被称为“模板” 的规则集组成的。
每个模板都包含了与每一个指定节点相匹配的应用规则。
XSLT<xsl:template>元素
<xsl:template>元素是用于创建模板的。
Match 属性的作用是使模板和XML与元素相匹配。Match属性也可以为整个XML文档定义模版。Match属性值是一个XPath表达式。(例如:match="/" 定义整个文档)。
接下来,让我们看一下上一章中XSL文件的简化版本:
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body>   <h2>My CD Collection</h2>   <table border="1">     <tr bgcolor="#9acd32">       <th>Title</th>       <th>Artist</th>     </tr>     <tr>       <td>.</td>       <td>.</td>     </tr>   </table> </body> </html></xsl:template></xsl:stylesheet>
通过上面的代码,转换的结果如下:
我的CD集
Title
Artist
.
.
因为XSL样式表就是XML文档本身,所以它一般都从XML开始声明:<?xml version="1.0" encoding="ISO-8 59-1"?>。
下一个元素<xsl:stylesheet>,把这份文档定义为XSLT样式表文档(连同版本号和XSLT命名空间属性一起定义)。
<xsl:template>元素定义了一份模板。Match=”/”属性使模板和XML源文档的根目录相互联结起来。
<xsl:template>元素里面的内容定义一些HTML来对结果进行书写。
最后两行定义了模版的结束符和样式表的结束符。
查看XML文件, 查看 XSL文件, 以及最终结果
这个例子所产生的结果有点令人失望,因为没有将任何数据从XML文档中复制到结果当中。
 
 
<xsl:value-of>
<xsl:value-of>元素是用于选取一个已选中的节点值的。
<xsl:value-of>元素
<xsl:value-of>元素可以用来选取一个XML元素的值,并把它添加到转换后的输出流里:
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body>   <h2>My CD Collection</h2>   <table border="1">     <tr bgcolor="#9acd32">       <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>
注意: 选择(select)属性值是一个XPath表达式。XPath表达式的作用,如:对文件系统进行导航,通过在前面添加斜杠 “/” 来选择子目录。
上述代码的转换结果如下:
我的CD集
Title
Artist
Empire Burlesque
Bob Dylan
通过这个例子得到的结果同样让人有点失望,因为只有一行数据从XML文件中复制到结果。
 
<xsl:for-each>
可以在XSLT中使用<xsl:for-each>元素来实现循环功能。
<sxl:-each>元素
XSL<xsl:for-each>元素的作用是:选择所有具有指定节点集的XML元素:
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body>    <h2>My CD Collection</h2>    <table border="1">      <tr bgcolor="#9acd32">        <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>
注意: 选择(select)属性值是一个XPath的表达式值。XPath表达式的作用,如:文件系统的导航,而这个文件系统是通过在前端添加斜杠 “/” 来选择子目录的。
上面的转换结果如下:
我的CD集
Title
Artist
Empire Burlesque
Bob Dylan
Hide your heart
Bonnie Tyler
XML 文件, XSL 文件, 以及 最终结果
过滤结果
我们也可以在<xsl:for-each>元素中添加一个选择属性来过滤XML文件中的结果。
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
合法的过滤操作是:
= (等于)
!= (不等于)
< 小于
> 大于
让我们来看一下调整后的XSL样式表:
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1">   <tr bgcolor="#9acd32">      <th>Title</th>      <th>Artist</th>   </tr>   <xsl:for-each select="catalog/cd[artist='Bob Dylan']">   <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>
上面的转换结果如下:
我的CD集
Title
Artist
Empire Burlesque
Bob Dylan
 
 
<xsl:sort>
<xsl:sort>元素用于对结果进行分类。
在哪儿放置分类信息
如果要对结果进行分类,可以在XSL文件里的<xsl:for-each>元素中添加一个<xsl:sort>元素:
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body>    <h2>My CD Collection</h2>    <table border="1">      <tr bgcolor="#9acd32">        <th>Title</th>        <th>Artist</th>      </tr>      <xsl:for-each select="catalog/cd">      <xsl:sort select="artist"/>      <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>
注意: 选择(select)属性需要指明对哪些XML元素进行分类。
上述代码的转换结果如下:
我的CD集
Title
Artist
Romanza
Andrea Bocelli
One night only
Bee Gees
Empire Burlesque
Bob Dylan
Hide your heart
Bonnie Tyler
The very best of
Cat Stevens
Greatest Hits
Dolly Parton
 
 
<xsl:if>
<xsl:if>元素的作用是:根据XML文件的内容设置一个条件语句。
<xsl:if>元素
如果你需要对XML文件的内容设置一个条件语句,那需要向XSL文档中添加一个<xsl:if>元素。
语法
<xsl:if test="expression"> ... ...some output if the expression is true... ...</xsl:if>
<xsl:if>元素应该放在哪
如果要添加一个条件语句,那么就必须在XSL文件里的<xsl:for-each>中添加一个<xsl:if>元素:
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body>    <h2>My CD Collection</h2>    <table border="1">      <tr bgcolor="#9acd32">        <th>Title</th>        <th>Artist</th>      </tr>      <xsl:for-each select="catalog/cd">      <xsl:if test="price > 10">       <tr>       <td><xsl:value-of select="title"/></td>       <td><xsl:value-of select="artist"/></td>       </tr>      </xsl:if>      </xsl:for-each>      </table>     </body>    </html> </xsl:template></xsl:stylesheet>
注意: 所要求的(test)属性值包括了所计算的表达式的值。
上述代码仅输出价格高于10的CD所对应的标题和艺术家。
上述代码的转换结果如下:
我的CD集
Title
Artist
Empire Burlesque
Bob Dylan
Still got the blues
Gary Moore
One night only
Bee Gees
Romanza
Andrea Bocelli
Black Angel
Savage Rose
1999 Grammy Nominees
Many
 
 
<xsl:choose>
<xsl:choose>元素通过<xsl:when>和<xsl:otherwise>一起配合使用来表达多种条件语句。
<xsl:choose>元素
语法
<xsl:choose> <xsl:when test="expression">    ... some output ... </xsl:when> <xsl:otherwise>    ... some output .... </xsl:otherwise></xsl:choose>
如何提出选择条件
如果你希望向XML文件中插入一个多重条件语句,可以在XSL文件中添加<xsl:choose>,<xsl:when>以及<xsl:otherwise>元素:
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body>    <h2>My CD Collection</h2>    <table border="1">      <tr bgcolor="#9acd32">        <th>Title</th>        <th>Artist</th>      </tr>      <xsl:for-each select="catalog/cd">      <tr>        <td><xsl:value-of select="title"/></td>      <xsl:choose>        <xsl:when test="price > 10">         <td bgcolor="#ff00ff">         <xsl:value-of select="artist"/></td>        </xsl:when>        <xsl:otherwise>         <td><xsl:value-of select="artist"/></td>        </xsl:otherwise>        </xsl:choose>        </tr>       </xsl:for-each>       </table>      </body>     </html>   </xsl:template></xsl:stylesheet>
当CD的价格高于10 时,上述代码会将红色背景色添加到对应的”Artist”专栏。
转换结果如下:
我的CD集
Title
Artist
Empire Burlesque
Bob Dylan
Hide your heart
Bonnie Tyler
Greatest Hits
Dolly Parton
Still got the blues
Gary Moore
Eros
Eros Ramazzotti
 
其它案例
这里举出另外一个案例,其中包含2个<xsl:when>元素:
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body>    <h2>My CD Collection</h2>    <table border="1">      <tr bgcolor="#9acd32">        <th>Title</th>        <th>Artist</th>      </tr>      <xsl:for-each select="catalog/cd">      <tr>        <td><xsl:value-of select="title"/></td>      <xsl:choose>        <xsl:when test="price > 10">        <td bgcolor="#ff00ff">        <xsl:value-of select="artist"/></td>        </xsl:when>        <xsl:when test="price < 9">        <td bgcolor="#cccccc">        <xsl:value-of select="artist"/></td>        </xsl:when>        <xsl:otherwise>        <td><xsl:value-of select="artist"/></td>        </xsl:otherwise>        </xsl:choose>        </tr>        </xsl:for-each>       </table>      </body>     </html></xsl:template></xsl:stylesheet>
当CD的价格高于10时,上面的这些代码会将红色背景色添加到对应的“Artist”专栏;当CD的价格大于9小于等于10时,会将灰色背景色添加到对应的“Artist”专栏。
转换结果如下:
我的CD集
Title
Artist
Empire Burlesque
Bob Dylan
Hide your heart
Bonnie Tyler
Greatest Hits
Dolly Parton
Still got the blues
Gary Moore
Eros
Eros Ramazzotti
 
 
 
 
<xsl:apply-templates>
<xsl:apply-templates>元素的作用是把指定的模板应用到当前元素或当前元素的子节点上。
<xsl:apply-templares>元素
<xsl:apply-templates>元素的作用是把指定的模板应用到当前元素或当前元素的子节点上。
如果我们向<xsl:apply-templates>元素中添加一个选择(select)属性,那么它将只处理与属性值相匹配的子元素。我们可以使用选择属性来指定元素在子节点中的处理顺序。
让我们看一下下面的这张XSL样式表:
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><html><body><h2>My CD Collection</h2> <xsl:apply-templates/> </body></html></xsl:template><xsl:template match="cd"><p><xsl:apply-templates select="title"/> <xsl:apply-templates select="artist"/></p></xsl:template><xsl:template match="title">Title: <span style="color:#ff0000"><xsl:value-of select="."/></span><br /></xsl:template><xsl:template match="artist">Artist: <span style="color:#00ff00"><xsl:value-of select="."/></span><br /></xsl:template></xsl:stylesheet>
转换结果如下:
我的CD集
Title: Empire Burlesque
Artist:
Bob Dylan
Title: Hide your heart
Artist:
Bonnie Tyler
Title: Greatest Hits
Artist:
Dolly Parton
 
 
XSLT - 客户端
如果你的浏览器支持XSLT,它可以在你的浏览器中把文件转换成XHTML。
JavaScript 解决方案
在前一章中,我们已经解释了XSLT是如何把一份XML文档转换成XHTML的。我们通过向XML文件中添加一个XSL样式表,从而浏览器执行转换任务。
即使这样做运行得不错,你也绝不可以放心地将其视为一个XML文件的样式参考(比如,在不支持XSLT的浏览器中,它将不会运行)。
更通用的解决方法是使用JavaScript 执行转换。
通过使用JavaScript,我们可以:
执行浏览器的特殊性(browser-specific)测试
根据浏览器和使用者的具体需要使用不同的样式表。
这就是XSLT的魅力。创造XSLT的初衷之一就是能够将数据从一个格式转换成另一个格式,并且支持不同的浏览器和不同的使用者的具体需求。
在客户端执行XSLT转换一定是未来浏览器工作任务的主要部分,我们将会在专业的浏览器市场看到它的成长性(包括与盲人对应的听觉浏览器, 网络打印机, 手动驱动等等)。
XML文件和XSL文件
具体看一下上一章看到过的XML文件:
<?xml version="1.0" encoding="ISO-8859-1"?><catalog> <cd>    <title>Empire Burlesque</title>    <artist>Bob Dylan</artist>    <country>USA</country>    <company>Columbia</company>    <price>10.90</price>    <year>1985</year> </cd>...</catalog>
XML文件.
附随的XSL样式表:
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body>    <h2>My CD Collection</h2>     <table border="1">      <tr bgcolor="#9acd32">        <th align="left">Title</th>         <th align="left">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文件.
注意XML文件与XSL文件并无关联。
重点: 上面这段话说明了一个XML文件可以通过多个不同的XSL样式表进行转换。
在浏览器中把XML文件转换成XHTML
下面这段源代码需要在客户端执行XML文件到XHTML文件的转换:
<html><body><script type="text/javascript">// Load XML var xml = new ActiveXObject("Microsoft.XMLDOM")xml.async = falsexml.load("cdcatalog.xml")// Load XSLvar xsl = new ActiveXObject("Microsoft.XMLDOM")xsl.async = falsexsl.load("cdcatalog.xsl")// Transformdocument.write(xml.transformNode(xsl))</script></body></html>
提示: 如果你不知道JavaScript 如何书写,你可以看一下我们的JavaScript 教程。
第一块代码创建了一个微软的XML文件解析器(XMLDOM)的实例,并把XML文件加载到内存中;第二块代码创建了另外一个解析器实例,并且把XML文件加载到内存中。最后一行的代码使用XSL文件来转换XML文档,并在浏览器中以XHTML的形式显示结果。太妙了!
 
 
XSLT - 服务器端
由于并不是所有的浏览器都支持XSLT,所以人们提出了一个解决方案,就是在服务器端把XML转换成XHTML。
一个跨浏览器解决方案
上一章我们解释了怎样在浏览器中使用XSLT把文件从XML转换成XHTML。我们创建了一个JavaScript 程序,它使用XML解析器执行转换任务。JavaScript 如何缺少一个XML解析器,那么它就不能在浏览器中运行。
如果想使XML数据支持所有类型的浏览器,我们必须在服务器端转换XML文档,并把它以XHTML的形式传回浏览器。
这是XSLT的另外一个魅力所在。创造XSLT的初衷之一就是能够将数据从一个格式转换成另一个格式,并使不同的浏览器支持传回的数据。
XML文件和XSLT文件
下面我们来看一下上一章使用过的XML文件:
<?xml version="1.0" encoding="ISO-8859-1"?><catalog> <cd>    <title>Empire Burlesque</title>    <artist>Bob Dylan</artist>    <country>USA</country>    <company>Columbia</company>    <price>10.90</price>    <year>1985</year> </cd>...</catalog>
查看XML文件。.
附随的XSL样式表:
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body>    <h2>My CD Collection</h2>     <table border="1">      <tr bgcolor="#9acd32">        <th align="left">Title</th>         <th align="left">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文件.
注意XML文件和XSL文件并无关联
重点: 上面这段话说明了一个XML文件可以通过多个不同的XSL样式表进行转换。
在服务器端把XML转换成XHTML
下面就是在服务器端把XML文件转换成XHTML的ASP源代码:
<%'Load XMLset xml = Server.CreateObject("Microsoft.XMLDOM")xml.async = falsexml.load(Server.MapPath("cdcatalog.xml"))'Load XSLset xsl = Server.CreateObject("Microsoft.XMLDOM")xsl.async = falsexsl.load(Server.MapPath("cdcatalog.xsl"))'Transform fileResponse.Write(xml.transformNode(xsl))%>
提示: 如果你不知道怎样书写ASP,你可以了解一下ASP 教程
第一块代码创建了一个微软的XML文件解析器(XMLDOM)的实例,并把XML文件加载到内存中;第二块代码创建了另外一个解析器实例,并且把XML文件加载到内存中。最后一行的代码使用XSL文件来转换XML文档,并在浏览器中以XHTML的形式发送结果。太妙了!
 
 
XSLT - 编辑XML
储存在XML文件中的数据可以在网络浏览器上进行编辑。
打开、编辑和保存XML的方法
现在,我们将演示一下如何打开、编辑和保存一份储存在服务器上的XML文件。
我们将用XSL来把XML 文档转换成HTML形式。XML元素值将以HTML的格式写入HTML输入域。HTML的格式是可以被编辑的。数据被编辑之后将被重新传回服务器,XML也将被升级(这部分工作由ASP完成)。
首先,看一下需要用到的 XML文件("tool.xml"):
<?xml version="1.0" encoding="ISO-8859-1"?><tool> <field id="prodName">    <value>HAMMER HG2606</value>   </field> <field id="prodNo">    <value>32456240</value>   </field> <field id="price">    <value>$30.00</value>   </field></tool>
让我们看一下下面这张样式表文件("tool.xsl"):
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><html><body><form method="post" action="edittool.asp"><h2>Tool Information (edit):</h2><table border="0"><xsl:for-each select="tool/field"><tr><td><xsl:value-of select="@id"/></td><td><input type="text"><xsl:attribute name="id"> <xsl:value-of select="@id" /></xsl:attribute><xsl:attribute name="name"> <xsl:value-of select="@id" /></xsl:attribute><xsl:attribute name="value"> <xsl:value-of select="value" /></xsl:attribute></input> </td></tr></xsl:for-each></table><br /><input type="submit" id="btn_sub" name="btn_sub" value="Submit" /><input type="reset" id="btn_res" name="btn_res" value="Reset" /></form></body></html></xsl:template></xsl:stylesheet>
上面的XSL文件对XML文件里的元素进行循环,并为每一个XML “域(field)” 元素创建了输入域(input field)。XML “域(field)” 元素的ID属性值被添加到每个HTML输入域(input field)的“ID”和“名称(name)”属性中。每个XML“值(value)”元素的值要被添加到每个HTML输入域的“值(value)”属性里。结果则是一个包含XML文件值的一张可编辑的HTML表单。
这里,我们已经拥有了第二个样式表:"tool_updated.xsl"。这就是XSL文件,它用于显示最新的XML数据。这个样式表不会产生一个可编辑HTML表格,但是会输出一个静态的HTML表格:
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><html><body><h2>Updated Tool Information:</h2><table border="1"><xsl:for-each select="tool/field"><tr><td><xsl:value-of select="@id" /></td><td><xsl:value-of select="value" /></td></tr></xsl:for-each></table></body></html></xsl:template></xsl:stylesheet>
ASP文件
上述"tool.xsl" 文件中的HTML表单里含有一个附带"edittool.asp"值的行为(action)属性。
"edittool.asp"页面包含了2个函数:loadFile()函数是用来加载和转换XML文件的,目的在于将内容显示出来;updateFile()函数的作用是把所有的改变应用于XML文件中。
<%function loadFile(xmlfile,xslfile)Dim xmlDoc,xslDoc'Load XML fileset xmlDoc = Server.CreateObject("Microsoft.XMLDOM")xmlDoc.async = falsexmlDoc.load(xmlfile)'Load XSL fileset xslDoc = Server.CreateObject("Microsoft.XMLDOM")xslDoc.async = falsexslDoc.load(xslfile)'Transform fileResponse.Write(xmlDoc.transformNode(xslDoc))end functionfunction updateFile(xmlfile)Dim xmlDoc,rootEl,fDim i'Load XML fileset xmlDoc = Server.CreateObject("Microsoft.XMLDOM")xmlDoc.async = falsexmlDoc.load(xmlfile)'Set the rootEl variable equal to the root elementSet rootEl = xmlDoc.documentElement'Loop through the form collectionfor i = 1 To Request.Form.Count 'Eliminate button elements in the form if instr(1,Request.Form.Key(i),"btn_")=0 then    'The selectSingleNode method queries the XML file for a     'single node that matches a query. This query requests    'the value element that is the child of a field element    'that has an id attribute which matches the current key    'value in the Form Collection. When there is a match -    'set the text property equal to the value of the current    'field in the Form Collection.    set f = rootEl.selectSingleNode("field[@id='" & _    Request.Form.Key(i) & "']/value")    f.Text = Request.Form(i) end ifnext'Save the modified XML filexmlDoc.save xmlfile'Release all object referencesset xmlDoc=nothingset rootEl=nothingset f=nothing'Load the modified XML file with a style sheet that'allows the client to see the edited informationloadFile xmlfile,server.MapPath("tool_updated.xsl")end function'If the form has been submitted update the'XML file and display result - if not,'transform the XML file for editingif Request.Form("btn_sub")="" thenloadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl")elseupdateFile server.MapPath("tool.xml")end if%>
提示: 如果你还不会书写ASP,请先学习我们的ASP 教程。
注意: 我们可以执行转换,并把这些改变应用于服务器端的XML文件。这将是一个跨浏览器的解决方案。客户端只要从浏览器中获取HTML值就可以了,而且所有的浏览器都具备这样的功能。
 
 
XSLT 摘要
这份教程已经教会了你如何通过XSLT把XML文档转换成其他格式。诸如:XHTML。
你已经学会了如何对元素进行重排和分类,执行测试并决定对哪些元素进行隐藏或显示。
如想获取更多XSLT信息,请阅读XSLT 参考.
现在你知道了XSLT,那下一步该学些什么呢?
XSL包括3种语言:XSLT, XPath 和XSL-FO,所以下一步应该学习的是XPath 和XSL-FO。
XPath
XPath作用是对XML文件中的元素和属性进行导航。
XPath是W3C XSL标准中的一个主要元素。掌握XPath是进一步开发XML的基础。
如果不具备XPath的知识,你就不可能创建XSLT文件。
如果你想学习更多关于XPath的知识,请访问我们的 XPath 教程。
XSL-FO
XSL-FO 描述的是输出到屏幕、文件、以及其他媒体的XML数据格式。
XSL-FO 文档是包含关于输出版面和输出内容信息的XML文件。
 
 
XSL 编辑器
如果你对XML的使用非常严谨,那么专业的XML编辑器可以帮你大忙。
XML是基于文本的
XML是基于文本的标记语言。
XML挺不错的一点就是可以使用如记事本这样简易的文本编辑器来创建和编辑XML文件。
然而,当你开始编辑XML后,你就会很快地发现,使用专业的XML编辑器来编辑XML文档会更加严谨和方便。
 
为什么需要一个XML编辑器?
今天XML已经成长为一个非常重要的技术了,发展工程都在使用基于XML的技术,如:
XML Schema 定义一个XML结构和数据形式
XSLT 转换XML数据
SOAP 在应用程序间交换XML数据
WSDL 描述具体的Web服务
RDF 描述具体的Web资源
XPath 和 XQuery 访问XML数据
SMIL 定义图像
为了实现XML文件编写上的“零错误”,我们需要一个非常智能的XML程序编辑器。
 
XML 程序编辑器
专业的XML程序编辑器会帮助你实现XML文件编写的“零错误”,通过DTD或一个有效的格式验证XML的有效性,从而使你能够遵循一个正确有效的XML结构去书写XML。
一个XML编辑器应该具备下面这些功能:
存在开始标签的,可以自动生成结束标签
强制你用有效的XML代码编写
通过DTD验证你所编写的XML代码
通过Schema验证你编写的XML代码
根据XML不同的语法给不同的XML代码标记不同的颜色
 
Altova's XMLSpy
我们已经使用 XMLSpy 多年。XMLSpy 是我们最喜欢的XML编辑器。下面列举了XMLSpy的一些具体优点:
使用方便
用不同的颜色标记代码
自动生成结束标签
与上下文相关的登陆助手
自动检查格式正误
实现文本形式和点格形式的交互式浏览
内置 DTD 和/或 Schema 的有效性验证功能
内置 XML Schema 图像格式设计器
强大的转换功能
数据库输入和输出功能
内置大量的XML文档类型模板
内置XPath 1.0 / 2.0 分析器
XSLT1.0 / 2.0 编辑器、仿形器和调试器
SOAP 客户端和调试器
图形WSDL编辑器
具备SOAP和WSDL的全部功能
强大的项目管理功能
以 Java、C++ 或 C# 格式生成代码的功能
 
 
 
 
 
原创粉丝点击