<转>XSLT教程

<原文路径:http://c.lstc.edu.cn:8090/kj/Manfeel/w3pop/default-5.asp.htm>

一、什么是XSLT

XSLT是一种把XML文件转换成XHTML文档或者其他的XML文档的语言。
XPath是一种由于操作XML文档的语言。

  • XSLT代表XSL转换(XSL Transformations)
  • XSLT是XSL最重要的部分
  • XSLT可以把XML文档转换成另一个XML文档
  • XSLT通过XPath操作XML文档
  • XSLT是一种W3C参考标准

XSLT=XSL转换(XSL Transformations):

XSLT是XSL的最重要的一部分。
XSLT用于把XML文件转换成另一份XML文件,或者转换成另一种被浏览器所识别的诸如HTML和XHTML类型的文件。通常情况下,XSLT是通过把每个XML元素转换成(X)HTML文件来完成的。
通过XSLT,你可以从已输出的文件里添加/移除元素和属性。你也可以把元素重新排列和分类,执行测试语句,决定是隐藏还是显示元素,或者实现其它更多的功能。 
对于描述转换过程,可以形象的描述为:XSLT把XML源树转(XML source-tree)换成XML结果树(XML result-tree)。

XSLT对于XPath的使用:

XSLT通过对XPath的使用来找寻XML文档中的信息。XPath用于操作XML文件中的元素和属性。

如何使它运行?

在转换过程中,XSLT通过XPath来定义部分应该和一个或更多预定的模板相匹配的源文件。当一个匹配找到后,XSLT将会把相匹配的部分源文件转换成结果文档。

XSLT是一个网络标准:

XSLT在1999年11月16日成为W3C参考标准。

二、浏览器对XSLT的支持

几乎所有专业浏览器都支持XML和XSLT。

Mozilla Firefox:

就如1,0,2版本的火狐是支持XML和XSLTi(以及CSS)。

Mozilla:

Mozilla含有XML外部解析器并且支持XML+CSS的显示,Mozilla同时也支持一些命名空间(namespace)。 Mozilla可执行XSLT。

Netscape:

Netscape版本8使用Mozilla引擎,因此它和Mozilla一样支持XML/XSLT。

Opera:

Opera版本9 ,支持XML和XSLT(以及CSS);Opera版本8只支持XML+CSS。

Internet Explorer:

IE6浏览器支持XML,Namespaces,CSS,XSLT和XPath。 IE5.0和The official W3C XSL参考标准并不是一样的。

三、XSLT 转换

正确的样式表声明

将文件以XSL样式表进行声明的根元素(root element)是<xsl:stylesheet> 或<xsl:transform>。
注意: <xsl:stylesheet> 和<xsl:transform>是完全同义的,任何一个都能被使用。
 声明根据W3C XSLT参考标准的XSL样式表的正确的途径是:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

or:

<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的命名空间(namespace)。如果你使用了这个命名空间,你也必须注明属性版本(version)=1.0。

<xsl:template>:

XSL样式表是由一个或者更多的被称为“模板(templates)”的规则设置(set of rules)组成的。
当与指定的节点匹配时,每个模板都包含了应用规则。

 XSLT<xsl:template>元素是用于创建模板的。
Match的属性的作用是使模板和XML与元素相结合。Match属性也可以为整个XML定义模版。Match属性值是一个XPath表达式。

<xsl:value-of>:

 <xsl:value-of>元素可以用来选取XML元素以及把它添加到已被转换的输出流里中去。

<xsl:for-each>:

<xsl:for-each>元素允许在XSLT里使用循环语句。
<xsl:for-each>元素的作用是:选择任何一个具有指定的节点设置(node-set)的XML元素。
注意: 选择(select)属性值是一个XPath的表达式值。XPath表达式主要用于类似文件系统的操作,而这个文件系统里是通过在前端添加“/”选择子目录。
我们也可以从XML文件通过将一个规则添加到<xsl:for-each>元素中的选择属性来过滤结果。
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
正规的过滤操作是:

  • =  (等于)
  • != (不等于)
  • < 小于
  • > 大于

 

<xsl:sort>:

 如果要对结果进行分类,可以在XSL文件里的<xsl:for-each>元素中添加一个<xsl:sort>元素。
注意: 选择(select)属性需要会告诉你哪些XML元素需要进行分类。

<xsl:if>:

 如果你要对XML文件的内容设置一个条件语句,那需要向XSL文件中添加一个<xsl:if>元素。

语法

<xsl:if test="expression"> 
          ...
          ...some output if the expression is true  
          ...
   </xsl:if>

注意: 所要求的语句(test)属性值包括了要条件表达式。

<xsl:choose>:

<xsl:choose>元素通过<xsl:when>和<xsl:otherwise>一起配合是用来表达多种条件语句。

语法

<xsl:choose>
    
<xsl:when test="expression">
      .....some output 
    
</xsl:when>
    
<xsl:otherwise>
     .... some output .
    
</xsl:otherwise>
</xsl:choose>
 

 

<xsl:apply-templates>:

<xsl:apply-templates>元素是把模板应用到当前元素或当前元素的子节点上。
可以使用选择属性来详细说明处理子节点的顺序。

四、在客户端转换

 这个的源代码需要在客户端把XML文件转换成XHTML。

<html>
<body>
<script type="text/javascript">
// Load XML 
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async 
= false
xml.load(
"cdcatalog.xml")
// Load XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async 
= false
xsl.load(
"cdcatalog.xsl")
// Transform
document.write(xml.transformNode(xsl))
</script>
</body>
</html>

五、在服务器端转换

 因为不是所有的浏览器都支持XSLT,所以人们提出了一个在服务器端把XML转换成XHTML的解决方案。
下面的(ASP)源代码要在服务器端把XML文件转换成XHTML。

<%
'Load XML
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async 
= false
xml.load(Server.MapPath(
"cdcatalog.xml"))

'Load XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async 
= false
xsl.load(Server.MapPath(
"cdcatalog.xsl"))

'Transform file
Response.Write(xml.transformNode(xsl))
%
>
posted @ 2007-09-03 00:01  不搽雪花膏  阅读(2282)  评论(0编辑  收藏  举报