<转>XSLT教程
一、什么是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>元素。
语法
...
...some output if the expression is true
...
</xsl:if>
注意: 所要求的语句(test)属性值包括了要条件表达式。
<xsl:choose>:
<xsl:choose>元素通过<xsl:when>和<xsl:otherwise>一起配合是用来表达多种条件语句。
语法
<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))
%>