XML Learning - XSLT
Overview
XSL - 不仅仅是样式表语言
- XSL 包括三部分:
- XSLT
- 一种用于转换 XML 文档的语言。
- XSLT 是一种用于将 XML 文档转换为 XHTML 文档或其他 XML 文档的语言。
- XPath
- 一种用于在 XML 文档中导航的语言。
- XPath 是一种用于在 XML 文档中进行导航的语言。
- XSL-FO
- 一种用于格式化 XML 文档的语言。
什么是 XSLT?
- XSLT 指 XSL 转换(XSL Transformations)。
- XSLT 是 XSL 中最重要的部分。
- XSLT 可将一种 XML 文档转换为另外一种 XML 文档。
- XSLT 使用 XPath 在 XML 文档中进行导航。
- XPath 是一个 W3C 标准。
XSLT = XSL 转换
XSLT 是 XSL 中最重要的部分。
XSLT 用于将一种 XML 文档转换为另外一种 XML 文档,或者可被浏览器识别的其他类型的文档,比如 HTML 和 XHTML。通常,XSLT 是通过把每个 XML 元素转换为 (X)HTML 元素来完成这项工作的。
通过 XSLT,您可以向或者从输出文件添加或移除元素和属性。您也可重新排列元素,执行测试并决定隐藏或显示哪个元素,等等。
描述转化过程的一种通常的说法是,XSLT 把 XML 源树转换为 XML 结果树
创建XSLT
<?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>
NB: <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">
如何在源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></country> USA
<company></company> Columbia
<price>10.90</price>
<year>1985</year>
</cd>
.
.
</catalog>
XSLT 元素
<xsl:template> 元素
XSL 样式表由一个或多套被称为模板(template)的规则组成。
每个模板含有当某个指定的节点被匹配时所应用的规则。
<xsl:template> 元素用于构建模板。
match 属性用于关联 XML 元素和模板。match 属性也可用来为整个文档定义模板。match 属性的值是 XPath 表达式(举例,match="/" 定义整个文档)。
<xsl:value-of>
<xsl:value-of> 元素用于提取某个选定节点的值。
<td><xsl:value-of select="catalog/cd/title"/></td>
<td><xsl:value-of select="catalog/cd/artist"/></td>
<xsl:for-each> 元素
<xsl:for-each> 元素允许您在 XSLT 中进行循环。
<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>
结果过滤
通过在 <xsl:for-each> 元素中添加一个选择属性的判别式,我们也可以过滤由 XML 文件输出的结果。
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
合法的过滤运算符:
- = (等于)
- != (不等于)
- < (小于)
- > (大于)
在何处放置排序信息
如需对结果进行排序,只要简单地在 XSL 文件中的 <xsl:for-each> 元素内部添加一个 <xsl:sort> 元素:
<xsl:if> 元素
用于放置针对 XML 文件内容的条件测试
<xsl:if test="price > 10">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:if>
<xsl:choose> 元素
用于结合 <xsl:when> 和 <xsl:otherwise> 来表达多重条件测试。
语法
<xsl:choose>
<xsl:when test="expression">
... 输出 ...
</xsl:when>
<xsl:otherwise>
... 输出 ....
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates> 元素
可把一个模板应用于当前的元素或者当前元素的子节点<xsl:apply-templates> 元素
<xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点。
假如我们向 <xsl:apply-templates> 元素添加一个 select 属性,此元素就会仅仅处理与属性值匹配的子元素。我们可以使用 select 属性来规定子节点被处理的顺序。
XSLT 程序控制转换
客户端
JavaScript 来load xml 和 xls 来进行控制转换。 需要浏览器支持xml解析
服务器端
.net 下进行load xml 和 xls 来进行控制转换。客户端不需要xml解析
Note:不需要引用在 xml文档中,这样一个xml文档就可以有多个xsl。
XSLT 元素表
元素 |
描述 |
IE |
N |
apply-imports |
从一个导入的样式表应用模板规则 |
6.0 |
|
apply-templates |
对当前元素或当前元素的子节点应用某个模板规则 |
5.0 |
6.0 |
attribute |
添加一个属性 |
5.0 |
6.0 |
attribute-set |
定义一套指定的属性 |
6.0 |
6.0 |
call-template |
调用一个指定的模板 |
6.0 |
6.0 |
choose |
与<when>以及<otherwise>协同使用来表达多重条件测试 |
5.0 |
6.0 |
comment |
在结果树中创建一个注释节点 |
5.0 |
6.0 |
copy |
创建当前节点的一个备份(无子节点及属性) |
5.0 |
6.0 |
|