前言: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)。