前言:XSL事實上分為兩部分,一部分是變換語言,另一部分是格式化語言。變換語言是將xml文檔里面的內容重新編排。格式化語言達到類似CSS的功能。本文對變換語言做一個總結。
Part 1 誰能變換XML?
a. IE瀏覽器
b. Xalan + Xerces
其中使用第二種方式的命令行如下:
java org.apache.xalan.xslt.Process -in one.xml -xsl deeptree .xsl -out one.html
IE瀏覽器沒有實現任何缺省的XSL規則,必須顯式指定一條XSL規則,并用“/”指代根結點。
Part 2 XML文檔中引用xslt樣式表
<?xml-stylesheet type="text/xsl" href="deeptree.xsl"?>
Part 3 HelloWorld式的XSL
<?xml version=”1.0”?>
<xsl:stylesheet version=”1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
<xsl:template match=”/”>
<HTML>
<HEAD>
<TITLE>A title</TITLE>
</HEAD>
<BODY>
A BODY.
</BODY>
</HTML>
<xsl:template>
</xsl:stylesheet>


Part 4 保證子節點被正確處理,需要用
<xsl:apply-templates />
Part 5 得到結點值,需要用
<xsl:value-of />
Part 6 得到所有同名的節點值,需要用
<xsl:for-each>
Part 7 match屬性的匹配模式
a. 匹配根結點
<xsl:apply-template match=”/”>
b. 匹配元素名
<xsl:apply-template match=”planets”>
c. 匹配子結點
<xsl:template match=”planet/name”>
<h3><xsl:value-of select=”.”/></h3>
</xsl:template>

d. 匹配元素的子代
<xsl:template match=”planet//name”>
<h3><xsl:value-of select=”.”/></h3>
</xsl:template>

e. 匹配屬性
<xsl:template match=”mass”>
<xsl:value-of select=”@units”/>
</xsl:template>

f. 匹配注釋
<xsl:template match=”comment()”>
<xsl:value-of select=”.”/>
<xsl:tempate>

g. 匹配文本節點
<xsl:template match=”text()”>
</xsl:template>


h. 匹配操作指令
<xsl:template match=”/processing-instruction”>
</xsl:template>

i. 使用或操作符
<xsl:template match=”Name|mass”>
<xsl:apply-templates/>
</xsl:template>
J. 使用“[]”判斷
<xsl:template match=”PLANET[@COLOR=’BLUE’]”>
<xsl:value-of select=”Name”/>
</xsl:template>
Part 8 XParth是什么,XParth也是用來定位元素,非常強大,由軸,結點測試,謂詞斷言組成。例如:
<xsl:value-of select=”child::Name”/>
Part 9 把元素文本轉換為別的元素的屬性,使用{}.例如:
<planet name=”{name}” mass=”{mass}{mass/@units}” day=”{day}” />
Part 10 <xsl:element>創建新元素。例如:
<xsl:element name=”{@name}”>
<mass><xsl:value-of select=”mass”/></mass>
</xsl:element>

Part 11 <xsl:attribute>創建新屬性。例如:
<planet>
<xsl:attribute name=”{name}”>
<xsl:value-of select=”@color”/>
</xsl:attribute>
</planet>
Part 12 <xsl:comment>生成注釋。例如:
<xsl:comment>This was the <xsl:value-of select=”name” />element</xsl:comment>
Part 13 <xsl:text>生成文本。例如:
<xsl:text disable-output-escaping=”yes”>
<planet>
</xsl:text>
Part 14 <xsl:copy>拷貝結點。例如:
<xsl:template match=”*|text()”>
<xsl:copy>
<xsl:apply-templates select=”*|text()”/>
</xsl:copy>
<xsl:template>
Part15 <xsl:sort>排列結點集。例如:
<xsl:apply-templates>
<xsl:sort select=”density” />
</xsl:apply-templates>
Part 16 <xsl:if>選擇邏輯處理。例如:
<xsl:if test=”position()=last()”><xsl:element name=”HR”/></xsl:if>
Part 17<xsl:choose>類似Java的Switch操作。例如:
<xsl:choose>
<xsl:when test=”@color=’RED’”>
<B>
<xsl:value-of select=”name”/>
</B>
</xsl:when>
<xsl:when test=”@color=’BLUE’”>
<I>
<xsl:value-of select=”name”/>
</I>
</xsl:when>
<xsl:otherwise>
<pre>
<xsl:value-of select=”.”/>
</pre>
</xsl:otherwise>
</xsl:choose>
Part 18 控制變換輸出文檔類型:
<xsl:output method=”html” indent=”yes” media-type=”text/xml”/>
method表明輸出類型,xml,html或text;ident表明插入空格進行縮排;media-type指定MIME屬性。
Part19 判斷當前階段深度
<xsl:if test="count(ancestor-or-self::*)=2">
xxxxx
</xsl:if>
Part20 判斷是否有孩子:
<xsl:if test="count(Menu) > 0">xxx</xsl:if>
總結:W3C的參考資料,W3C XSLT規范(www.w3.org/TR/xslt),XPath規范(www.w3.org/TR/xpath)。